1、前言
拦截器的主要作用:登录校验、权限验证、乱码解决、性能监控和异常处理等
在 Spring Boot 项目中,使用拦截器功能通常需要以下 3 步:
- 定义拦截器
- 注册拦截器
- 指定拦截规则
2、定义拦截器
HandlerInterceptor 接口中定义以下 3 个方法,如下表。
返回值类型 | 方法声明 | 描述 |
---|---|---|
boolean | preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) | preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) |
void | postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) | 该方法在控制器处理请求方法调用之后、解析视图之前执行,可以通过此方法对请求域中的模型和视图做进一步修改。 |
void | afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) | 该方法在视图渲染结束后执行,可以通过此方法实现资源清理、记录日志信息等工作。 |
/**
* 通用拦截器
*/
public class CommonInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
return true;
}
@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 {
}
}
3、注册拦截器
创建一个实现了 WebMvcConfigurer 接口的配置类(使用了 @Configuration 注解的类),重写 addInterceptors() 方法
@Configuration
public class MvcConfig implements WebMvcConfigurer {
/**
* 注册自定义的拦截器
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new CommonInterceptor());
}
}
4、指定拦截规则
如果是拦截所有,静态资源也会被拦截
@Configuration
public class MvcConfig implements WebMvcConfigurer {
/**
* 注册自定义的拦截器
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new CommonInterceptor()).addPathPatterns("/**")//拦截所有请求
.excludePathPatterns("/","/login","*.html","/images/**");//放行的请求
}
}