• spring boot 拦截器


    Spring boot 拦截器 配置很简单,比Spring Mvc 更加方便配置。

    1、实现HandlerInterceptor

    所有的拦截器需要实现HandlerInterceptor,可重写preHandle,postHandle,afterCompletion

    我这边写了自定义的注解,用来匿名接口。

    拦截Controller接口,进行验证出来,false则拦截

     1 public class HttpInterceptor implements HandlerInterceptor
     2 {
     3     @Override
     4     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception
     5     {
     6         if (handler instanceof HandlerMethod)
     7         {
     8             HandlerMethod handlerMethod = (HandlerMethod) handler;
     9             // 获取方法上的注解
    10             AllowAnonymous allowAnonymous = handlerMethod.getMethod().getAnnotation(AllowAnonymous.class);
    11             // 如果方法上的注解为空 则获取类的注解
    12             if (allowAnonymous == null)
    13             {
    14                 allowAnonymous = handlerMethod.getMethod().getDeclaringClass().getAnnotation(AllowAnonymous.class);
    15             }
    16             if (allowAnonymous != null)
    17             {
    18                 boolean value = allowAnonymous.value();
    19                 if (value)
    20                 {
    21                     System.out.println(String.format("Method:%s,匿名", handlerMethod.getMethod()));
    22                     return true;
    23                 }
    24             }
    25             String token = request.getHeader("token");
    26             if (token != "123456")
    27             {
    28                 System.out.println(String.format("Method:%s,验证不成功", handlerMethod.getMethod()));
    29                 return false;
    30             }
    31 
    32         }
    33         return true;
    34     }
    35 
    36     /**
    37      * 请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)
    38      *
    39      * @param request
    40      * @param response
    41      * @param handler
    42      * @param modelAndView
    43      * @throws Exception
    44      */
    45     @Override
    46     public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception
    47     {
    48         //System.out.println("执行了TestInterceptor的postHandle方法");
    49     }
    50 
    51     /**
    52      * 在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)
    53      *
    54      * @param request
    55      * @param response
    56      * @param handler
    57      * @param ex
    58      * @throws Exception
    59      */
    60     @Override
    61     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception
    62     {
    63         //System.out.println("执行了TestInterceptor的afterCompletion方法");
    64     }
    65 }

    2、配置启用

    很简单,只有继承WebMvcConfigurer,重写addInterceptors,将自定义的拦截器加入即可,可配置不拦截哪些路径,比如静态文件等。

     1 @Configuration
     2 public class HttpInterceptorConfig implements WebMvcConfigurer
     3 {
     4     @Override
     5     public void addInterceptors(InterceptorRegistry registry)
     6     {
     7         InterceptorRegistration registration = registry.addInterceptor(new HttpInterceptor());
     8         //所有路径都被拦截
     9         registration.addPathPatterns("/**");
    10         //添加不拦截路径
    11         registration.excludePathPatterns(
    12                 //登录
    13                 "/login",
    14                 //html静态资源
    15                 "/**/*.html",
    16                 //js静态资源
    17                 "/**/*.js",
    18                 //css静态资源
    19                 "/**/*.css",
    20                 "/**/*.woff",
    21                 "/**/*.ttf"
    22         );
    23     }
    24 }
  • 相关阅读:
    C/C++知识点清单01
    数独GUI程序项目实现
    第三章--Win32程序的执行单元(部分概念及代码讲解)(中-线程同步
    《JAVA程序设计与实例》记录与归纳--继承与多态
    《JAVA程序设计与实例》记录与归纳--类与对象
    C语言范例学习06-上
    单一职责原则
    牙疼真要命,牙坏真烧钱
    跳槽 & 思维导图
    成熟的 Git 分支模型
  • 原文地址:https://www.cnblogs.com/zjtao/p/12213359.html
Copyright © 2020-2023  润新知