←←←←←←←←←←←← 快!點關注java
在項目開發中咱們經常須要對請求進行驗證,如登陸校驗、權限驗證、防止重複提交等等,經過攔截器來過濾請求。自定義一個攔截器須要實現HandlerInterceptor接口。程序員
代碼以下:web
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,意味着在將來版本中可能會取消。代碼以下spring
/** \* 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()); */ } }
添加一個Controllerapp
/** \* RequestMapping 將Http請求映射到方法上 */ @RequestMapping("/") public String HelloWorld() { System.out.println("Http請求已發出"); return "Hello World"; }
啓動項目,訪問localhost:8080.觀察控制檯,發現以下所示ide
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請求已發出 請求完成後的操做... 視圖渲染以後...
意味着咱們自定義的攔截器成功生效了。post
## 寫在最後:
禿頂程序員的不易,看到這裏,點了關注吧!
點關注,不迷路,持續更新!!!spa