创建拦截器组件,实现HandlerInterceptor接口,实现如下:
@Slf4j @Component public class MyInterceptor implements HandlerInterceptor { @Autowired private UserInfoRedis userInfoRedis; @Override // 执行前 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { Cookie[] cookies = request.getCookies(); String userId=""; for (Cookie cookie:cookies){ if("userId".equals(cookie.getName())) { userId = cookie.getValue(); break; }; } if(userId.equals("")){ // return false直接返回 ,可以使用response.sendRedirect("/path")重定向其他页面 ;return true 则程序继续执行其他拦截器 return false; } return true; } // controller 后处理 @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } @Override // 返回前 public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } }实现 WebMvcConfigurer 接口并使用 @Configuration 将拦截器注册到servlet ,这种注册方式不需要修改视图解析器
@Configuration public class InterceptorConfig implements WebMvcConfigurer { @Autowired private MyInterceptor myInterceptor ; @Override public void addInterceptors(InterceptorRegistry registry) { //addPathPatterns 设置匹配路径,excludePathPatterns设置排除路径 registry.addInterceptor(myInterceptor).addPathPatterns("/**").excludePathPatterns("/"). .excludePathPatterns("/static/**") .excludePathPatterns("/**.jsp") .excludePathPatterns("/logoutParent","/login","/sam/**") ; } }