spring boot入門(七) springboot的攔截器Interceptor。最完整、簡單易懂、詳細的spring boot教程。
阿新 • • 發佈:2019-01-07
很多同學搞不懂攔截器和過濾器的區別,我們先說一下他們的區別:
- 過濾器和攔截器非常相似,但是它們有很大的區別
- 最簡單明瞭的區別就是過濾器可以修改request,而攔截器不能
- 過濾器需要在servlet容器中實現,攔截器可以適用於javaEE,javaSE等各種環境
- 攔截器可以呼叫IOC容器中的各種依賴,而過濾器不能
- 過濾器只能在請求的前後使用,而攔截器可以詳細到每個方法
通俗的說過濾器就是篩選出你要的東西,比如requeset中你要的那部分
攔截器在做安全方面用的比較多,比如終止一些流程。
接下來我們舉個簡單的例子:
1、建立interceptor包,在此包下建立Interceptor類。此處我們以處理Ajax跨域請求為例,關於跨域請求,大家不懂的可以自行學習。程式碼如下:
public class Interceptor implements HandlerInterceptor { public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception { // TODO Auto-generated method stub } public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception { // TODO Auto-generated method stub } public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception { response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin")); response.setHeader("Access-Control-Allow-Methods", "*"); response.setHeader("Access-Control-Allow-Credentials", "true"); response.setHeader("Access-Control-Allow-Headers", "x-requested-with,content-type"); System.err.println("------------------>:已完成跨域處理"); return true; } }
注意此類實現了HandlerInterceptor介面。
2、我們還要註冊一下此攔截器才能被springboot檢測到,在config包下建立AppConfigurer類,程式碼如下:
@Configuration public class AppConfigurer extends WebMvcConfigurerAdapter { @Bean public HandlerInterceptor getMyInterceptor() { return new Interceptor(); } @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(getMyInterceptor()).addPathPatterns("/**"); super.addInterceptors(registry); } }
注意此類繼承了WebMvcConfigurerAdapter類。getMyInterceptor方法為攔截器例項注入方法。addInterceptors方法為說明攔截目標方法。此處我們所有請求都攔截。
3、測試結果如下:
攔截器配置成功。