zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    正则二三事
    docker elasticsearch 5.6.13 安装ik分词器
    centos docker 防火墙设置(多个ip之间互相访问)
    ElasticSearch结构化搜索和全文搜索
    Jest — ElasticSearch Java 客户端
    提高redis cluster集群的安全性,增加密码验证
    spring boot 设置 gzip 压缩
    centos 7磁盘空间满了导致redis cluster问题和kafka的问题
    SpringBoot之MySQL数据的丢失的元凶--事务(转)
    mysql mycat 1.6.6.1-release 批量 insert 数据丢失问题(续)
  • 原文地址:https://www.cnblogs.com/zjtao/p/12213359.html
Copyright © 2011-2022 走看看