MyInterceptor
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
//测试,设置session10s后过期
request.getSession().setMaxInactiveInterval(60);
//判断登录session是否过期,如果session过期 返回状态码666,注意,项目session储存了activeUser。
ActiveUser activerUser = (ActiveUser)request.getSession().getAttribute("activeUser");
if(null == activerUser){
response.setStatus(666);
}
return true;
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
System.out.println("================= 操作成功,返回数据 ===============");
}
}
WebMvcConfig
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
private static final List<String> EXCLUDE_PATH= Arrays.asList("/","/css/**","/excel/**","/fonts/**","/images/**","/js/**","/plugin/**","/scss/**","/webjars/**");
@Override
public void addInterceptors(InterceptorRegistry registry) {
InterceptorRegistration interceptorRegistration = registry.addInterceptor(new MyInterceptor());
/*释放静态资源*/
interceptorRegistration.excludePathPatterns(EXCLUDE_PATH);
/*过滤登录接口*/
interceptorRegistration.excludePathPatterns("/login/index");
interceptorRegistration.addPathPatterns("/**");
}
}
js
//全局校验后台返回的所有接口是否满足,如果不满足跳转指定路径
$.ajaxSetup({
contentType:"application/x-www-form-urlencoded;charset=utf-8",
complete:function(XMLHttpRequest,textStatus){
var status = XMLHttpRequest.status;
console.log(status)
if(status == '666'){
top.location.href=''
}
}
});
注意点:
1.拦截器中方法的执行顺序是 preHandle -> Controller -> postHandle -> afterCompletion
只有preHandle返回true,才会执行后面的方法
2:preHandle:在业务处理器处理请求之前被调用。预处理,可以进行编码、安全控制、权限校验等处理;
3:postHandle:在业务处理器处理请求执行完成后,生成视图之前执行。后处理(调用了Service并返回ModelAndView,但未进行页面渲染),有机会修改ModelAndView
4:afterCompletion:在DispatcherServlet完全处理完请求后被调用,可用于清理资源等。返回处理(已经渲染了页面);