我随意写,你随意看。

林老头儿

但愿绝望和无奈远走高飞

Fork me on Gitee

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中写相应的处理代码即可使用。
posted @ 2020-04-01 10:53  林老头儿  阅读(19513)  评论(0编辑  收藏  举报