• Spring boot 配置自己的拦截器


    框架使用的是spring boot 2.0

    首先,自定义拦截器实现HandlerInterceptor接口,preHandler是在执行controller方法前执行的  此外还有两个方法,具体作用最后才说,先熟悉以下拦截器的使用流程。

     1 @Component
     2 public class PassportInterceptor implements HandlerInterceptor{
     3     
     4     @Override
     5     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
     6             throws Exception {
     7         HttpSession session = request.getSession();
     8         User user  = (User)session.getAttribute("user");
     9         if(user == null) {
    10             response.sendRedirect("/login");
    11             return false;
    12         }
    13         return true;
    14     }
    15     
    16 }

    上面拦截器只是简单的通过session验证是否登录

    定义了自己的拦截器后就要实现 WebMvcConfigurer接口 注:该接口好像是spring boot 2.0以后有的  之前不是这个接口 该接口提供了方法添加拦截器,加上@Component注解  让其能被ioc容器管理

     1 @Component
     2 public class LabWebConfiguration implements WebMvcConfigurer{
     3     
     4     @Autowired
     5     PassportInterceptor passportInterceptor;
     6     
     7     @Override
     8     public void addInterceptors(InterceptorRegistry registry) {
     9         
    10         registry.addInterceptor(passportInterceptor)
    11             .addPathPatterns("/**")
    12             .excludePathPatterns("/stylesheets/**", "/javascripts/**","/fonts/**",
    13                     "/images/**", "/login/**", "/regist/**");
    14     }
    15     
    16 
    17 }

    registry有三个重要的方法,addInterceptors()方法将自定义的拦截器添加进去 addPathPatterns 方法的主要作用是添加拦截器要拦截的路径,excludePathPatterns的功能则是配置对某些路径放行。上面我针对自己的静态资源、还有登录注册页面放行

    接下来做一个小小的测试  测试以下拦截器各个方法的执行顺序

     1 @Controller
     2 public class TestController {
     3 
     4     @RequestMapping("/test")
     5     @ResponseBody
     6     public String testInterceptor() {
     7         
     8         System.out.println("Controller方法执行");
     9         
    10         return "test";
    11     }
    12     
    13 }
     1 @Component
     2 public class TestInterceptor implements HandlerInterceptor{
     3     
     4     @Override
     5     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
     6             throws Exception {    
     7         System.out.println("preHandler执行了");    
     8         return true;
     9     }
    10     @Override
    11     public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
    12             ModelAndView modelAndView) throws Exception {
    13         System.out.println("postHandler执行了");    
    14     }
    15     @Override
    16     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
    17             throws Exception {
    18         // TODO Auto-generated method stub
    19         System.out.println("afterCompletion执行了");    
    20     }
    21     
    22 }
     1 @Component
     2 public class LabWebConfiguration implements WebMvcConfigurer{
     3     @Autowired
     4     TestInterceptor testInterceptor;
     5     
     6     @Override
     7         public void addInterceptors(InterceptorRegistry registry) {
     8             registry.addInterceptor(testInterceptor)
     9                 .addPathPatterns("/test");
    10         }
    11     
    12 
    13 }

    结果如下

    可见preHander方法只在Controller执行前   return true则放行 

    postHandler则是在 具体的Controller方法执行后执行

    afterCompletion  看资料说是在页面渲染完成后执行   因此可以用来作为资源的清理工作

  • 相关阅读:
    社交类app开发( 仿陌陌 客户端+服务器端)
    iPhone的xib与iPad的xib相互转换
    SVN的搭建
    使用企业证书给iOS应用重签
    [破解版]Unity3d引擎最新稳定版本4.5.5下载(官方最新稳定版本)
    iphone开发资源汇总
    iOS绘图教程
    iOS静态库相关-封装lib
    iOS内存管理策略和实践
    前台中文乱码
  • 原文地址:https://www.cnblogs.com/helloDuo/p/9633626.html
Copyright © 2020-2023  润新知