1、拦截器接口三个方法
- preHandle目标方法执行之前
- postHandle目标方法执行完成之后,页面处理之前
- afterCompletion最终页面
2、登录的一个拦截功能添加
(1)创建一个登录拦截器
@Slf4jpublic class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {log.info(request.getRequestURI());HttpSession session = request.getSession();Object user = session.getAttribute("user");if (user == null || !(user instanceof User) || !StringUtils.hasText(((User)user).getUsername())){//拦截需要登录response.sendRedirect("/login");session.setAttribute("msg","请重新登录");return false;}//false是拦截return true;}}
(2)把拦截器注册到Spring容器中
- 静态资源我们要注意不能拦截,所以使用excludePathPatterns排除拦截页面
addPathPatterns使用”/**”匹配所有路径
@Configurationpublic class MyConfig {@Beanpublic WebMvcConfigurer getWebMvcConfigurer(){WebMvcConfigurer webMvcConfigurer = new WebMvcConfigurer() {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**").excludePathPatterns("/login").excludePathPatterns("/error").excludePathPatterns("/css/**").excludePathPatterns("/js/**").excludePathPatterns("/images/**").excludePathPatterns("/fonts/**");}};return webMvcConfigurer;}}
