SpringBootWeb 篇-深入了解 Filter 过滤器与 Interceptor 拦截器(实现登录校验 Filter + Interceptor + JWT 令牌)
在Spring Boot中,Filter和Interceptor是用于处理web请求的两种不同机制。
- Filter:
- Filter是基于Servlet的技术,它可以拦截所有的HTTP请求和响应。
- Filter可以在请求处理之前或之后执行操作。
- 使用Filter可以进行权限校验、编码转换、流的处理等。
- Interceptor:
- Interceptor是Spring框架提供的,它可以拦截Controller的请求。
- Interceptor可以在请求处理之前、之中、之后以及完成后执行操作。
- 使用Interceptor可以进行日志记录、参数校验、权限校验等。
以下是一个简单的Filter和Interceptor的实现示例:
// Filter 示例
@Component
public class MyFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// 在请求处理前执行
HttpServletRequest req = (HttpServletRequest) request;
System.out.println("Filter: Before request, URI=" + req.getRequestURI());
// 继续执行链中的下一个Filter或目标资源
chain.doFilter(request, response);
// 在请求处理后执行
System.out.println("Filter: After request, status=" + ((HttpServletResponse) response).getStatus());
}
}
// Interceptor 示例
@Component
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 在请求处理前执行
System.out.println("Interceptor: Before request, URI=" + request.getRequestURI());
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 {
// 在请求处理完成后执行
System.out.println("Interceptor: After completion, URI=" + request.getRequestURI());
}
}
在Spring Boot的配置中添加Filter和Interceptor的注册代码:
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Autowired
private MyFilter myFilter;
@Autowired
private MyInterceptor myInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(myInterceptor)
.addPathPatterns("/**"); // 拦截所有路径
}
@Bean
public FilterRegistrationBea
评论已关闭