1.先找到shiro配置攔截器的接口
官方路徑是:jeecg-boot/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/shiro/authc/aop/JwtFilter.java
/**
* @Description: 鑒權登錄攔截器
* @Author: Scott
* @Date: 2018/10/7
**/
@Slf4j
public class JwtFilter extends BasicHttpAuthenticationFilter
2.找到上述類的preHandle方法
官方的:
protected boolean preHandle(ServletRequest request, ServletResponse response) throws Exception {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
httpServletResponse.setHeader("Access-control-Allow-Origin", httpServletRequest.getHeader("Origin"));
httpServletResponse.setHeader("Access-Control-Allow-Methods", "GET,POST,OPTIONS,PUT,DELETE");
httpServletResponse.setHeader("Access-Control-Allow-Headers", httpServletRequest.getHeader("Access-Control-Request-Headers"));
// 跨域時會首先發送一個option請求,這里我們給option請求直接返回正常狀態
if (httpServletRequest.getMethod().equals(RequestMethod.OPTIONS.name())) {
httpServletResponse.setStatus(HttpStatus.OK.value());
return false;
}
return super.preHandle(request, response);
}
修改之后:
protected boolean preHandle(ServletRequest request, ServletResponse response) throws Exception {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
httpServletResponse.setHeader("Access-control-Allow-Origin", httpServletRequest.getHeader("Origin"));
httpServletResponse.setHeader("Access-Control-Allow-Methods", "GET,POST,OPTIONS,PUT,DELETE");
httpServletResponse.setHeader("Access-Control-Allow-Headers", httpServletRequest.getHeader("Access-Control-Request-Headers"));
// 跨域時會首先發送一個option請求,這里我們給option請求直接返回正常狀態
if (httpServletRequest.getMethod().equals(RequestMethod.OPTIONS.name())) {
httpServletResponse.setStatus(HttpStatus.OK.value());
return false;
}
try{
return super.preHandle(request, response);
}catch (Exception e){
httpServletResponse.setStatus(HttpStatus.OK.value());
JSONObject data = new JSONObject();
data.put("code", 5000);
data.put("message", "Token失效,請重新登錄");
data.put("success", false);
data.put(" ", new Date().getTime());
/**獲取OutputStream輸出流*/
OutputStream outputStream = response.getOutputStream();
/**設置json返回格式*/
((HttpServletResponse) response).setHeader("content-type", "application/json");
/**將字符轉換成字節數組,指定以UTF-8編碼進行轉換*/
byte[] dataByteArr = data.toJSONString().getBytes(StandardCharsets.UTF_8);
/**使用OutputStream流向客戶端輸出字節數組*/
outputStream.write(dataByteArr);
return false;
}
}
}
測試后返回:
{
"code":5000,
"message":"Token失效,請重新登錄",
"success",false,
"timestamp",4654131654615131 //當前時間戳
}
個人微信: