Spring Boot新增攔截器
Servlet本身提供了Filter,用於過濾web請求。Spring提供了攔截器HandlerInterceptor,功能與過濾器類似,但更精細。攔截器攔截request請求後,可以對內容進行判斷,然後丟擲異常或者返回false,從而直接打斷request的後續執行。但攔截器是無法修改request的內容的。
要使用攔截器,必須使用配置類WebMvcConfigurer。
1. 定義攔截器,定義方式有兩種:
public class TemplateInterceptor extends HandlerInterceptorAdapter {...}
或:
public class TemplateInterceptor implements HandlerInterceptor {...}
這兩種定義方式效果相同。但HandlerInterceptorAdapter多一個介面。
2. 定義配置檔案Configuration,定義方式有兩種:
@Configuration
public class TemplateConfig extends WebMvcConfigurerAdapter {...}
或:
@Configuration
public class TemplateConfig implements WebMvcConfigurer {...}
這兩種定義方式效果相同。
注意必須新增@Configuration註解,這樣spring才會將其注入到自身容器中。
3. 過載Configuration的addInterceptors()函式,註冊自定義的攔截器:
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new TemplateInterceptor()).addPathPatterns("/**");
}
這樣,攔截器就被配置到spring中了。當收到請求時,攔截器就會生效。
對於攔截器HandlerInterceptor,提供了3個介面用於過載:preHandle(),postHandle(),afterCompletion()。
因此實現自定義的攔截器TemplateInterceptor時:
public class TemplateInterceptor implements HandlerInterceptor {
/**
*請求處理前呼叫
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
return true;
}
/**
* 請求處理後呼叫
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
/**
* 整個請求處理完畢時呼叫,即在檢視渲染完畢時回撥
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
若TemplateInterceptor是extends HandlerInterceptorAdapter,則多一個介面afterConcurrentHandlingStarted()。
相關文章
- spring boot 攔截器Spring Boot
- spring boot 新增自定義監聽器、過濾器、攔截器Spring Boot過濾器
- Spring Boot中攔截器的使用Spring Boot
- spring攔截器Spring
- Spring Boot專案中如何定製攔截器Spring Boot
- Spring Boot 第六彈,攔截器如何配置,看這兒~Spring Boot
- Spring MVC 中的攔截器的使用“攔截器基本配置” 和 “攔截器高階配置”SpringMVC
- 解決spring cloud Feign遠端呼叫服務,新增headers解決攔截器攔截問題SpringCloudHeader
- spring mvc攔截器,spring攔截器以及AOP切面的區別和原始碼SpringMVC原始碼
- Spring 過濾器和攔截器Spring過濾器
- spring mvc 攔截器的使用SpringMVC
- Spring Boot第七彈,別再問我攔截器如何配置了!!!Spring Boot
- spring中的過濾器與攔截器Spring過濾器
- 談談 Spring 的過濾器和攔截器Spring過濾器
- Spring 常用的三種攔截器詳解Spring
- gRPC伺服器中新增全域性異常攔截器RPC伺服器
- sql攔截器SQL
- SpringMVC攔截器SpringMVC
- Mybatis 攔截器MyBatis
- axios 攔截器iOS
- axios攔截器iOS
- MyBatis攔截器MyBatis
- Spring Boot使用過濾器和攔截器分別實現REST介面簡易安全認證Spring Boot過濾器REST
- SpringMVC攔截器,設定不攔截的URLSpringMVC
- Spring AOP 日誌攔截器的事務管理Spring
- SpringMVC-攔截器SpringMVC
- gRPC(3):攔截器RPC
- 【SpringMVC】 4.3 攔截器SpringMVC
- Mybatis Interceptor 攔截器MyBatis
- SpringBoot攔截器中獲取註解、攔截器中注入ServiceSpring Boot
- Flume內建攔截器與自定義攔截器(程式碼實戰)
- vue.js新增攔截器,實現token認證(使用axios)Vue.jsiOS
- Spring-全域性異常攔截Spring
- mybatis註冊攔截器MyBatis
- SpringMVC中的攔截器SpringMVC
- grpc中的攔截器RPC
- HandlerInterceptor - 自定義攔截器
- 攔截過濾器模式過濾器模式