【SpringBoot】如何給Controller/RestController設置一個前置攔截器


本文例程下載:https://files.cnblogs.com/files/heyang78/redisCache_Interceptor_sample_210922.rar

本文適用SpringBoot版本:v2.5.4

 

有這樣一個RestController類如下:

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class JsonCtrl {
    
    @RequestMapping("/sayhello")
    public String sayHello() {
        System.out.println("准備說你好");
        return "hello";
    }
}

這個類就是一般的Rest控制器類,直接用控制器類也是可以的,里面沒有特殊設置。

 

如何給它設置前置攔截器呢,首先我們需要一個實現了HandlerInterceptor接口的攔截器類:

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

@Component
public class Interceptor implements HandlerInterceptor{
    /**
     * 在請求處理之前進行調用(Controller/RestController方法調用之前)
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        String path = request.getServletPath();
        System.out.println("已攔截 path="+path);

        // 執行權限檢查、登錄驗證、緩存處理等
        
        return true;
    }
}

然后,我們需要一個實現了WebMvcConfigurer接口的WebConfig類把攔截器加載進來。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer{
    @Autowired
    private Interceptor interceptor;
    
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(interceptor);
    }
}

注意,registry.addInterceptor()方法可以添加多個攔截器,不限個數。

 

然后把啟動類跑起來就好了。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

這個類沒什么特別的。

 

內嵌的Tomcat運行起來后,我們可以在瀏覽器里輸入http://localhost:8080/sayhello或是其它路徑,然后到控制台去看攔截器是否按預期運轉了。

2021-09-22 20:52:42.992  INFO 22764 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 0 ms
已攔截 path=/sayHello
已攔截 path=/error
已攔截 path=/sayhello
准備說你好
已攔截 path=/21332
已攔截 path=/error

正如預期般運轉,很好。

至此,一個RestController類的前置攔截器就搭建好了。

參考資料:https://www.cnblogs.com/itfeng813/p/13026652.html

--END--


免責聲明!

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



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