SpringBoot之註冊攔截器

Spring MVC中的攔截器(Interceptor)類似於Servlet中的過濾器(Filter),它主要用於攔截用戶請求並作相應的處理。例如通過攔截器可以進行權限驗證、記錄請求信息的日誌、判斷用戶是否登錄等。

在springBoot中註冊攔截器更加方便,如下:

1. 自定義一個攔截器類
實現HandlerInterceptor 接口,重寫 preHandle、postHandle、 afterCompletion 方法。

public class MyInterceptor implements HandlerInterceptor{
	
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		// TODO Auto-generated method stub
		
		System.out.println("preHandle>>>>>>>>>>>>>>>");
		// 返回值必須爲true才生效
		return true;
	}
	
	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		// TODO Auto-generated method stub
		System.out.println("postHandle>>>>>>>>>>>>>>>>");
	}

	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		// TODO Auto-generated method stub
		System.out.println("afterCompletion>>>>>>>>>>>>>>>>>>>>>");
	}



}

攔截器中的方法執行流程爲 preHandle → controlle → postHandle → afterCompletion

  1. preHandle 方法:會在控制器(controller)前執行,返回值表示是否中斷後續執行,當返回值爲true時表示繼續向下執行,爲false時會中斷後續所有操作;
  2. postHandle 方法:會在控制器方法調用之後,且解析視圖之前執行。可以通過此方法對請求域中的模型和視圖做出進一步的修改;
  3. afterCompletion 方法:會在整個請求完成,即視圖渲染結束之後執行。可以通過此方法實現一些資源清理、記錄日誌信息等工作。

2.配置攔截器
自定義配置類進行攔截器的配置,實現WebMvcConfigurer 接口,重寫addInterceptors方法,其中addPathPatterns 表示攔截路勁,excludePathPatterns表示排除路勁,如下:

@Configuration
public class MyWebMvcConfig implements WebMvcConfigurer{
	/**
	 * 攔截器配置
	 */
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		// TODO Auto-generated method stub
		registry.addInterceptor(new MyInterceptor())
		// 攔截路勁
		.addPathPatterns("/**")
		// 排除路徑
		.excludePathPatterns("/excludeInterceptor");
	}
	
}

測試類:

@RestController
public class InterceptorController {

	@GetMapping("/testInterceptor")
	public String testInterceptor() {
		
		return "testInterceptor";
	}
	
	@GetMapping("/excludeInterceptor")
	public String excludeInterceptor() {
		
		return "excludeInterceptor";
	}
}

訪問:當訪問 /testInterceptor 時 攔截器進行攔截,在這裏插入圖片描述
訪問 /excludeInterceptor 攔截器不進行攔截!
在這裏插入圖片描述

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