在項目開發中咱們經常須要對請求進行驗證,如登陸校驗、權限驗證、防止重複提交等等,經過攔截器來過濾請求。自定義一個攔截器須要實現HandlerInterceptor接口。
代碼以下:前端
import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 自定義攔截器,如身份驗證、權限控制、登陸攔截等、 * 一、實現HandlerInterceptor * 二、實現Spring的WebRequestInterceptor */ public class HttpInterceptor implements HandlerInterceptor { /** * 請求執行以前進行調用,對請求進行預處理, * 返回true以後可繼續往下執行調用下一個Interceptor。或者Controller * ,返回false終止請求 */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("請求前攔截"); return true; } /** * 執行完Controller以後 && DispatcherServlet進行視圖渲染以前執行 */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("請求完成後的操做..."); } /** * DispatcherServlet渲染以後取執行。能夠用於資源清理等工做 */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("視圖渲染以後..."); } }
此時咱們還須要建立一個類來實現WebMvcConfigurer,並重寫addInterceptors方法。將前面定義的攔截器添加到InterceptorRegistry中。
除此以外咱們還能夠繼承WebMvcConfigurerAdapter 或者繼承WebMvcConfigurationSupport。可是WebMvcConfigurerAdapter在2.0版本被標記了@Deprecated,意味着在將來版本中可能會取消。代碼以下java
/** * WebMvcConfigurerAdapter 自定義攔截器集成WebMvcConfigurerAdapter,SpringBoot 2.0 後,該類被標記爲@Deprecated.後的版本中會被取消 * 解決辦法 * 一、實現WebMvcConfigurer (推薦) * 二、繼承WebMvcConfigurationSupport */ // 該註解表示將類交給spring進行管理 @Configuration public class WebAppConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { /** * 能夠添加多個攔截器 */ registry.addInterceptor(new HttpInterceptor()).addPathPatterns("/**"); /** * 也能夠添加多個攔截器 * registry.addInterceptor(new HttpInterceptor1()); */ } }
添加一個Controller程序員
/** * RequestMapping 將Http請求映射到方法上 */ @RequestMapping("/") public String HelloWorld() { System.out.println("Http請求已發出"); return "Hello World"; }
啓動項目,訪問localhost:8080.觀察控制檯,發現以下所示web
2019-01-06 00:32:32.168 INFO 69288 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' 2019-01-06 00:32:32.168 INFO 69288 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' 2019-01-06 00:32:32.173 INFO 69288 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 5 ms 請求前攔截 Http請求已發出 請求完成後的操做... 視圖渲染以後...
意味着咱們自定義的攔截器成功生效了。spring
歡迎關注個人公衆號:程序員共成長 數據庫
公衆號內回覆【禮包】,獲取程序員專屬資料,包括但不限於Java、Python、Linux、數據庫、大數據、架構、測試、前端、ui以及各方向電子書架構