后端拦截器代码
/**
* @author crlion
*/
@Component
public class AuthInterceptor implements HandlerInterceptor {
@Resource
private RedisOperator redisOperator;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException {
//判断请求方式,通过所有OPTION请求
if ("OPTIONS".equals(request.getMethod().toUpperCase())) {
return true;
}
System.err.println("==================进入拦截器了==================");
String url = request.getRequestURL().toString();
String token = request.getHeader("Authorization");
System.err.println("url:" + url + " token:" + token);
if (JwtUtils.checkToken(request)) {
System.err.println("无效Token!");
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
ResultList result = new ResultList(new Meta(Code.Auth_ERR, "无效Token!"), null);
response.getWriter().println(JSON.toJSONString(result));
response.getWriter().flush();
return false;
} else
if (redisOperator.get(token) == null) {
System.err.println("Token过期!");
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
ResultList result = new ResultList(new Meta(Code.Auth_ERR, "Token过期!"), null);
response.getWriter().println(JSON.toJSONString(result));
response.getWriter().flush();
return false;
}else
if (redisOperator.ttl(token)<RedisConst.CHECK_TIME) {
System.err.println("Token续期!");
System.err.println("续期前:"+redisOperator.ttl(token));
redisOperator.set(token,token, RedisConst.AUTH_TIME);
System.err.println("续期后:"+redisOperator.ttl(token));
return true;
}else {
System.err.println("Token正常!");
System.err.println("Token剩余时间:" + redisOperator.ttl(token));
return true;
}
}
}
前端拦截器代码
const myInterceptor = axios.interceptors.response.use(response => {
if(response.data.meta !==undefined && response.data.meta.code === 40011){
axios.interceptors.request.eject(myInterceptor);
window.sessionStorage.clear();
alert(response.data.meta.msg);
window.location.reload();
}
return response;
}, error => {
alert('error');
console.log(error);
console.dir(error);
return Promise.reject(error);
});
后端运行结果
==================进入拦截器了==================
url:http://localhost:8080/getPostList token:ey...省略
Token续期!
续期前:8
续期后:10
==================进入拦截器了==================
url:http://localhost:8080/searchDictType token:eyJ0...省略
Token过期!