前言:
在JavaEE中,經常用filter來做攔截器,後來有了SpringMvc,我們使用HandlerInterceptor進行攔截,現在有了Springboot,我們也使用HandlerInterceptor進行攔截,但我們不用xml的配置了,省去很多的事情。
依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
一:理論實現
- 實現接口
HandlerInterceptor
,重寫其中的三個方法 - 實現接口
WebMvcConfigurer
,重寫addInterceptors
方法,註冊攔截器
二:實戰
1.自定義攔截器
@Component
public class MyInterceptor implements HandlerInterceptor {
//請求處理前,也就是訪問Controller前
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String num = request.getParameter("num");
if(num==null){
System.out.println("被攔截器攔截了");
return false;
}else {
return true;
}
}
//請求已經被處理,但在視圖渲染前
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("請求處理結束了");
}
//請求結果結果已經渲染好了,response沒有進行返回但也無法修改reponse了(一般用於清理數據)
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
2.配置攔截規則
@Configuration
public class MyConfig implements WebMvcConfigurer {
@Autowired
private MyInterceptor myInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 通過registry來註冊攔截器,通過addPathPatterns來添加攔截路徑
registry.addInterceptor(this.myInterceptor).addPathPatterns("/**");//攔截所有請求
}
}
3.編寫controller進行測試
@RestController
public class TestController {
@GetMapping("hi")
public String testController(){
System.out.println("我正在處理請求");
return "這是一個攔截器測試類";
}
}