创建自定义拦截器
实现HandlerInterceptor接口,preHandle:调用controller之前执行,如果该方法返回false或者抛出异常就会结束请求
public class LoginHandlerInterceptor implements HandlerInterceptor{
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// TODO Auto-generated method stub
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// TODO Auto-generated method stub
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}
// 目标方法执行之前
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
SysUser sysUser= (SysUser)request.getSession().getAttribute("user");
if(sysUser == null) {
// 未登陆返回登陆页面
System.out.println("-------拦截请求--------");
String path = "/test/signin";
response.sendRedirect(path);
return false;
}else {
// 已经登陆放行请求
// 已登陆的用户加入线程当中
RequestHolder.add(sysUser);
RequestHolder.add(request);
return true;
}
}
}
配置自定义拦截器(新版的springboot会拦截静态资源所以要 excludePathPatterns 静态资源)
@Configuration
public class MyMvcConfig implements WebMvcConfigurer{
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginHandlerInterceptor() {}).addPathPatterns("/**")
.excludePathPatterns(Arrays.asList("/test/signin", "/login", "/assets/**", "/bootstrap3.3.5/**", "/css/**", "/js/**"));
}
}