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中寫相應的處理代碼即可使用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM