1、拦截器接口三个方法

  • preHandle目标方法执行之前
  • postHandle目标方法执行完成之后,页面处理之前
  • afterCompletion最终页面

image.png

2、登录的一个拦截功能添加

(1)创建一个登录拦截器

  1. @Slf4j
  2. public class LoginInterceptor implements HandlerInterceptor {
  3. @Override
  4. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
  5. log.info(request.getRequestURI());
  6. HttpSession session = request.getSession();
  7. Object user = session.getAttribute("user");
  8. if (user == null || !(user instanceof User) || !StringUtils.hasText(((User)user).getUsername())){
  9. //拦截需要登录
  10. response.sendRedirect("/login");
  11. session.setAttribute("msg","请重新登录");
  12. return false;
  13. }
  14. //false是拦截
  15. return true;
  16. }
  17. }

(2)把拦截器注册到Spring容器中

  • 静态资源我们要注意不能拦截,所以使用excludePathPatterns排除拦截页面
  • addPathPatterns使用”/**”匹配所有路径

    1. @Configuration
    2. public class MyConfig {
    3. @Bean
    4. public WebMvcConfigurer getWebMvcConfigurer(){
    5. WebMvcConfigurer webMvcConfigurer = new WebMvcConfigurer() {
    6. @Override
    7. public void addInterceptors(InterceptorRegistry registry) {
    8. registry.addInterceptor(new LoginInterceptor())
    9. .addPathPatterns("/**")
    10. .excludePathPatterns("/login")
    11. .excludePathPatterns("/error")
    12. .excludePathPatterns("/css/**")
    13. .excludePathPatterns("/js/**")
    14. .excludePathPatterns("/images/**")
    15. .excludePathPatterns("/fonts/**");
    16. }
    17. };
    18. return webMvcConfigurer;
    19. }
    20. }