返回
Spring MVC 拦截器:详尽指南
前端
2023-09-07 13:00:41
概述
Spring MVC 拦截器是一个强大的工具,用于对处理器进行预处理和后处理,并在请求和响应的生命周期中提供控制。通过自定义拦截器,可以实现各种功能,例如安全检查、日志记录、性能监控和请求/响应修改。
自定义拦截器
要创建自定义拦截器,需要实现 HandlerInterceptor
接口并重写所需的方法。最常用的方法有:
preHandle()
:在处理器方法执行之前调用,用于执行预处理逻辑。如果返回true
,则继续执行处理器;否则,中断请求。postHandle()
:在处理器方法执行之后调用,用于执行后处理逻辑。此时,视图已渲染,但响应尚未提交。afterCompletion()
:在请求完成(无论成功还是失败)后调用,用于执行清理或日志记录等操作。
目录结构
为了更好地组织代码,建议采用以下目录结构:
src/main/java
|-- com.example.demo
|-- controllers
|-- interceptors
|-- service
将自定义拦截器放在 interceptors
包中。
示例拦截器
创建一个名为 MyInterceptor1
的自定义拦截器:
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyInterceptor1 implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 在请求处理之前执行预处理逻辑
// 例如:安全检查、日志记录
System.out.println("MyInterceptor1 preHandle...");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
// 在请求处理之后执行后处理逻辑
// 例如:视图渲染、性能监控
System.out.println("MyInterceptor1 postHandle...");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// 在请求完成后执行清理或日志记录
System.out.println("MyInterceptor1 afterCompletion...");
}
}
注册拦截器
在 springmvc.xml
配置文件中注册自定义拦截器:
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**" />
<bean class="com.example.demo.interceptors.MyInterceptor1" />
</mvc:interceptor>
</mvc:interceptors>
这将拦截所有请求。可以使用 path
属性指定要拦截的特定请求模式。
SEO 优化