springboot使用攔截器
阿新 • • 發佈:2019-12-31
建個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 ,控制檯輸出