攔截器是動態攔截Action調用的對象。它提供了一種機制可以使開發者可以定義在一個action執行的前后執行的代碼,也可以在一個action執行前阻止其執行,同時也提供了一種可以提取action中可重用部分的方式。在AOP(Aspect-Oriented Programming)中攔截器用於在某個方法或字段被訪問之前,進行攔截然后在之前或之后加入某些操作。
如何在spring boot中添加攔截器?
1.首先自己實現一個攔截器
import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class MyInterceptor implements HandlerInterceptor{ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("preHandler"); return true;//這里一定要返回true要不然后面的不會執行 } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("postHandler"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("afterHandler"); } }
2.實現WebMvcConfigurer接口並重寫addInterceptors方法
@Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(myInterceptor()).addPathPatterns("/**");//將自己的攔截器注冊到spring中並添加攔截的路徑 } @Bean MyInterceptor myInterceptor(){ return new MyInterceptor();//提供自己的攔截器的bean } }
3.創建controller進行測試
@RestController
public class HelloController {
@GetMapping("gethello")
public String getHello(){
System.out.println("get hello");
return "get hello";
}
}
4.測試結果