一、简介
概念: java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action执行前阻止其执行,同时也提供了一种可以提取Action中可重用部分代码的方式。
作用域: 动态拦截Action调用的对象。
简单来说,我们可以通过配置拦截器,来进行一些操作,比如:提前拦截掉不合规范的请求、在下发请求时提前做一些重复的事情等等。
使用方式: 实现方法有两种 实现Interceptor接口或继承HandlerInterceptorAdapter类,实现接口需要实现其中的方法,而继承抽象类则一般实现preHandle方法即可。
二、实现
这里采用实现HandlerInterceptor的方法。
首先配置拦截器
@Configuration
class InterceptorConfig implements WebMvcConfigurer {
//需要拦截的地址,使用正则来规范
final String[] InterceptPaths = {"/**"};
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new InterceptorControl()).addPathPatterns(InterceptPaths);
}
}
实现拦截器
这里仅实现打印请求的功能进行测试
class InterceptorControl implements HandlerInterceptor {
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
//打印请求参数的拦截器,方便调试时使用
//cookie
String Cookie = request.getHeader("Cookie");
//Authorization
String Authorization = request.getHeader("Authorization");
//请求地址
StringBuffer requestURL = request.getRequestURL();
//获取请求参数
String params = request.getQueryString();
System.out.println("\r\n==================================================================================\r\n");
System.out.println("URL : " + requestURL + "\r\n");
System.out.println("params : " + params + "\r\n");
System.out.println("Cookie : " + Cookie + "\r\n");
System.out.println("Authorization : " + Authorization + "\r\n");
System.out.println("==================================================================================\r\n");
}
}