zoukankan      html  css  js  c++  java
  • SpringBoot如何添加拦截器

    SpringBoot如何添加拦截器

    在web开发中,为了实现登录权限验证,我们不可能在每个方法中都写代码去验证身份信息,常见的是在springboot中添加一个拦截器在用户的的请求到达controller层的时候实现登录验证,那么SpringBoot如何添加拦截器呢?

    步骤如下:

    一、新建拦截器

    既然要使用拦截器,那肯定需要有一个自己定义的拦截器,所以新建一个拦截器:

    自定义拦截器需要继承HandlerInterceptorAdapter并重写preHandle方法

    public class AuthInterceptor extends HandlerInterceptorAdapter
    {
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception
        {
            // 拦截处理代码
            System.out.println("拦截到了");
            //返回true通过,返回false拦截
            return true;
        }
    }
    

    二、注册拦截器

    新建配置类继承WebMvcConfigurerAdapter类,重写addInterceptors方法。如下:

    既然要增加自己的拦截器,那当然要得到springboot加入拦截器的入口,然后把我们自己写的拦截器也注册到springboot中让其起作用。

    //注册拦截器
    @Configuration
    public class WebAppConfig extends WebMvcConfigurerAdapter
    {
        @Override
        public void addInterceptors(InterceptorRegistry registry)
        {
            //注册自己的拦截器并设置拦截的请求路径
            registry.addInterceptor(new AuthInterceptor()).addPathPatterns("/**");
            super.addInterceptors(registry);
        }
    }
    

    需要加入@Configuration注解,在springboot启动的时候就会该配置类就会被扫描并加载,从而将我们的拦截器注册进去。这时候的拦截器已经可以正常工作了,拦截的逻辑代码都在写AuthInterceptor类的preHandle方法中。

    三、拦截器的注解用法

    实际开发中有一些方法是需要拦截的,有一下方法是不需要拦截的,因此如果要在每个方法中写明需不需要拦截就变得非常麻烦,因此用Java中的反射和注解机制来简化操作:

    1. 编写注解类如下:

      @Target(ElementType.METHOD)
      @Retention(RetentionPolicy.RUNTIME)
      public @interface LoginRequired
      {
          boolean loginSuccess() default true;
      }
      

      之后在需要被拦截的方法上使用该注释标注。

    2. 在第一步中的AuthInterceptor类中的preHandle方法判断被拦截的方法是否带有我们的注释LoginRequired:

      public class AuthInterceptor extends HandlerInterceptorAdapter
      {
          @Override
          public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception
          {
              // 拦截处理代码
               HandlerMethod method = (HandlerMethod) handler;
               LoginRequired loginRequired = method.getMethodAnnotation(LoginRequired.class);
              if (null != loginRequired)
              {
                  //这个是需要拦截的方法
              } else
              {
                  //这个是不需要拦截的方法
                  return true;
              }
              //返回true通过,返回false拦截
              return true;
          }
      }
      

    四、测试

    1. 在需要拦截的方法上加上@LoginRequired注解。
    2. 在AuthInterceptor中写相应的处理代码即可使用。
  • 相关阅读:
    P1891 疯狂LCM
    P2568 GCD
    P1516 青蛙的约会和P2421 [NOI2002]荒岛野人
    P4168 蒲公英
    P5960 差分约束算法模板
    P2024 食物链(种类并查集)
    CF1328E Tree Queries
    CF1328B K-th Beautiful String
    dij-spfa乱搞
    P1993 小K的农场
  • 原文地址:https://www.cnblogs.com/jinchengll/p/12611039.html
Copyright © 2011-2022 走看看