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中写相应的处理代码即可使用。
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值