Spring 拦截器(Interceptor)是 Spring MVC 框架中用于在某个方法或动作执行之前和之后执行代码的一种机制。它通常用于处理日志记录、事务管理、安全检查、权限验证等跨领域的关注点(cross-cutting concerns)。Spring 拦截器通过实现 HandlerInterceptor
接口或继承 HandlerInterceptorAdapter
类(后者提供了空实现的方法,便于只覆盖需要的方法)来实现。
实现步骤
-
创建拦截器: 实现
HandlerInterceptor
接口或继承HandlerInterceptorAdapter
类,并实现其方法。HandlerInterceptor
接口包含三个方法:-
preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
:在请求处理之前进行调用(Controller方法调用之前)。 -
postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
:请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)。 -
afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
:在整个请求结束之后被调用,也就是在DispatcherServlet渲染了对应的视图执行之后。
public class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 在这里编写请求处理前的代码 return true; // 返回true表示继续流程(如调用下一个拦截器或处理器);返回false表示流程中断,不会继续调用其他的拦截器或处理器 } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { // 在这里编写请求处理后的代码 } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { // 在这里编写清理代码 } }
-
-
注册拦截器: 在 Spring MVC 的配置文件中(XML配置或Java配置)注册拦截器,并指定其拦截的路径和排除的路径(可选)。
-
XML配置示例:
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/> <!-- 拦截所有请求 --> <bean class="com.example.MyInterceptor"/> </mvc:interceptor> </mvc:interceptors>
-
Java配置示例(使用Java配置类):
@Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**"); // 拦截所有请求 } }
-