1. 程式人生 > 程式設計 >springboot使用攔截器

springboot使用攔截器

建個springboot專案,目錄結構如下

MyInterceptor實現HandlerInterceptor介面

可根據需要實現三個方法中的一個或多個

preHandle是在controller前執行,這個方法只會在當前這個Interceptor的preHandle方法返回值為true的時候才會向下執行,postHandle在業務處理器處理請求執行完成後,生成檢視之前執行,afterCompletion在DispatcherServlet完全處理完請求後被呼叫,可用於清理資源等 。

public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request,HttpServletResponse response,Object handler) throws Exception {
        System.out.println("preHandle"
); return true; } @Override public void postHandle(HttpServletRequest request,Object handler,ModelAndView modelAndView) throws Exception { System.out.println("postHandle"); } @Override public void afterCompletion(HttpServletRequest request,Exception ex) throws Exception { System.out.println("afterCompletion"
); } } 複製程式碼

controller測試程式碼

@RestController
public class TestController {
    @GetMapping(value = "/hello")
    public String hello() {

        System.out.println("hello controller");
        return "hello world";
    }

    @GetMapping(value = "/test")
    public String test()
    {
        System.out.println("test controller"
); return "this is test"; } } 複製程式碼

配置檔案MyConfig實現WebMvcConfigurer介面

實現介面方法addInterceptors,registry.addInterceptor是新增一個攔截器,addPathPatterns()是新增要攔截的路徑,excludePathPatterns是新增不攔截的路徑

@Configuration
public class MyConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
//        新增攔截器
        InterceptorRegistration interceptorRegistration = registry.addInterceptor(new MyInterceptor());
//
        interceptorRegistration.addPathPatterns("/**")
                               .excludePathPatterns("/test");
    }
}
複製程式碼

測試

瀏覽器訪問 http://localhost:8080/hello ,控制檯輸出

瀏覽器訪問 http://localhost:8080/test ,控制檯輸出

碼雲程式碼