自定义interceptor
时间: 2023-08-19 09:03:46 浏览: 77
自定义拦截器
在Spring中,可以使用自定义拦截器(Interceptor)来对请求进行预处理和后处理。自定义拦截器可以用于实现日志记录、权限验证、性能监控等功能。
下面是自定义拦截器的基本步骤:
1. 创建拦截器类并实现HandlerInterceptor接口。该接口有三个方法:
- preHandle:在请求处理之前调用,返回值为boolean类型,如果返回false,则请求中断。
- postHandle:在请求处理之后调用,但是在视图被渲染之前。因此可以在这个方法中对请求域中的属性或视图做出修改。
- afterCompletion:在视图被渲染之后调用。用于资源清理操作。
2. 在Spring配置文件中注册拦截器。
- 配置<mvc:interceptors>元素,将拦截器添加到拦截器链中。
- 或者实现WebMvcConfigurer接口,并重写addInterceptors方法,在该方法中注册拦截器。
下面是一个简单的示例:
```java
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
// 在请求处理之前进行调用(Controller方法调用之前)
System.out.println("调用 MyInterceptor 的 preHandle 方法");
return true; // 如果返回false,则请求中断
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// 请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)
System.out.println("调用 MyInterceptor 的 postHandle 方法");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// 在整个请求结束之后被调用,也就是在DispatcherServlet渲染了对应的视图之后执行(主要是用于进行资源清理工作)
System.out.println("调用 MyInterceptor 的 afterCompletion 方法");
}
}
```
配置文件中添加:
```xml
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/> <!-- 拦截所有请求 -->
<bean class="com.example.MyInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
```
或者实现WebMvcConfigurer接口:
```java
@Configuration
public class MyMvcConfigurer implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MyInterceptor())
.addPathPatterns("/**"); // 拦截所有请求
}
}
```
阅读全文