在Spring MVC中,请求拦截器(Interceptor)是一种可以用来拦截用户的请求,并进行一些预处理或后处理的机制。它主要用于实现诸如权限检查、记录日志、修改请求或响应等方面的功能。
要使用Spring MVC的拦截器,你需要创建一个实现了HandlerInterceptor
接口的类,并且重写以下方法:
-
preHandle
方法:在控制器方法执行之前调用,可以用来做权限检查或其他预处理工作。如果返回true
,则继续执行下一个拦截器或控制器方法;如果返回false
,则停止后续操作。 -
postHandle
方法:在控制器方法执行之后,但在视图渲染之前调用。可以用来修改模型数据或者设置视图属性等。 -
afterCompletion
方法:在整个请求完成后调用,即在视图渲染之后。通常用于资源清理或者记录日志等操作。
下面是一个简单的拦截器示例:
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
public class SampleInterceptor extends HandlerInterceptorAdapter {
@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 {
// 在这里可以在视图渲染前做些事情,如修改ModelAndView对象
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// 在这里可以做一些清理工作,如关闭打开的资源等
}
}
创建了拦截器之后,还需要在Spring MVC的配置文件中注册它。可以通过<mvc:interceptors>
标签或者通过WebMvcConfigurer
接口来配置拦截器。
例如,在Java配置方式下:
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new SampleInterceptor())
.addPathPatterns("/**") // 指定拦截规则
.excludePathPatterns("/login", "/error"); // 排除某些路径
}
}
这样,当请求匹配到指定的路径模式时,就会被定义好的拦截器所拦截并执行相应的方法。