在Spring Boot中,拦截器(Interceptor)是一种用于在请求处理过程中进行预处理和后处理的机制。Spring Boot的拦截器与Servlet规范中的过滤器(Filter)类似,但提供更丰富的功能和更便捷的使用方式。
要在Spring Boot中使用拦截器,您可以按照以下步骤进行操作:
1.创建一个实现了HandlerInterceptor接口的拦截器类,该接口定义了在请求处理前、请求处理后以及请求完成后的方法。
public class MyInterceptor implements HandlerInterceptor {
// 在请求处理前执行,返回值表示是否中断请求
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 进行预处理,例如登录验证、权限检查等
return true; // 返回true表示继续执行请求,返回false表示中断请求
}
// 在请求处理后执行,但在视图被渲染之前(Controller方法调用之后)
@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 {
// 进行资源清理工作
}
}
2.在Spring Boot中,您可以通过实现WebMvcConfigurer接口或使用@WebFilter、@WebListener等注解的方式配置拦截器。
2.1(推荐)实现WebMvcConfigurer接口的方式,然后实现WebMvcConfigurer
的addInterceptors()
:
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 添加自定义拦截器
registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");
}
}
@Configuration
public class AdminWebConfig implements WebMvcConfigurer{
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptor())//拦截器注册到容器中
.addPathPatterns("/**") //所有请求都被拦截包括静态资源
.excludePathPatterns("/","/login","/css/**","/fonts/**","/images/**",
"/js/**","/aa/**"); //放行的请求
}
2.2 使用注解的方式:
在拦截器类上使用@Component注解,并添加 @WebFilter、@WebListener等注解进行配置。
3 配置完成后:
拦截器将按照其定义的顺序拦截请求,您可以在preHandle方法中进行预处理,例如登录验证、权限检查等;在postHandle方法中进行后处理,例如添加日志、修改响应等;在afterCompletion方法中进行资源清理工作。