springboot項目搭建之攔截器

首先通過實現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,excludePathPatterns排除靜態文件攔截

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 用戶排除攔截
		// excludePathPatterns排除靜態文件攔截
		registry.addInterceptor(new BaseHandlerInterceptor()).addPathPatterns("/**").excludePathPatterns("/resources/**");
		super.addInterceptors(registry);
	}
 
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章