springboot專案搭建之攔截器
阿新 • • 發佈:2019-01-11
首先通過實現HandlerInterceptor介面來建立一個攔截器類
這個介面一共有三個方法,preHandle是請求到controller之前執行的,只有返回true時請求才會繼續進行
postHandle是返回modelAndView之前執行的,但是隻有preHandle方法返回true後經過controller返回時才會執行,否則返回false則不會執行,afterCompletion是請求結束後才執行,同樣需要preHandle返回true,該方法通常用於統一的日誌處理,異常處理,資源清理等工作
package org.wcy.config; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; /** * <p>Title : BaseHandlerInterceptor</p> * <p>Description : 系統最高許可權攔截器</p> * <p>DevelopTools : Eclipse_x64_v4.8.0</p> * <p>DevelopSystem : Windows 10</p> * <p>Company : org.wangchenyang</p> * @author : wangChenYang * @date : 2018年11月25日 下午12:09:05 * @version : 12.0.0 */ public class BaseHandlerInterceptor implements HandlerInterceptor { /** * 進入Handler方法之前執行 * * @param request HttpServletRequest * @param response HttpServletResponse * @param handler handler * @return true(放行) or false(攔截) */ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.print("before:"); return true; } /** * 進入Handler方法之後,返回modelAndView之前執行(可以往MV裡面填充公用的ModelAndView) * * @param request HttpServletRequest * @param response HttpServletResponse * @param handler handler * @param mv ModelAndView */ public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView mv) throws Exception { System.out.print("mv 執行:"); } /** * 執行Handler完成後執行(統一異常處理,統一日誌處理) * * @param request HttpServletRequest * @param response HttpServletResponse * @param handler handler * @param e 異常資訊 */ public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception e) throws Exception { System.out.print("after:"); } }
在SpringMVC中攔截器的實現可以通過配置xml檔案內的mvc:interceptor標籤來新增自定義的攔截器類,
而springboot沒有xml。這個時候就需要通過繼承WebMvcConfigurationSupport這個類來實現攔截器的添加了,
這個類就是我在上個文章內提到的用以配置靜態檔案的類,同時它也可以用以裝載自定義攔截器。
addInterceptors用於指定攔截器,addPathPatterns用於指定攔截的URL
package org.wcy.config; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; /** * <p>Title : MyWebMvcConfig</p> * <p>Description : 自定義靜態資源對映路徑和靜態資源存放路徑</p> * <p>DevelopTools : Eclipse_x64_v4.7.1</p> * <p>DevelopSystem : Windows 10</p> * <p>Company : org.wcy</p> * @author : WangChenYang * @date : 2018年11月14日 下午9:07:33 * @version : 0.0.1 */ @Configuration public class MyWebMvcConfig extends WebMvcConfigurationSupport { /** * 新增自定義靜態資源對映路徑和靜態資源存放路徑(圖片) */ @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { System.out.println("配置靜態資源"); registry.addResourceHandler("/resources/**").addResourceLocations("classpath:/WEB-INF/resources/"); super.addResourceHandlers(registry); } /** * 新增攔截器 * @param registry */ @Override public void addInterceptors(InterceptorRegistry registry) { // 多個攔截器組成一個攔截器鏈 // addPathPatterns 用於新增攔截規則 // excludePathPatterns 使用者排除攔截 registry.addInterceptor(new BaseHandlerInterceptor()).addPathPatterns("/**"); super.addInterceptors(registry); } }