spring-boot - Servlet 过滤器应用了两次
问题描述
我有一个暴露其余端点的 Spring Boot 应用程序,在项目内部有一个应用过滤器的库:
@Component
@Order(1)
public class MyFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {}
它工作正常,但我发现了一个奇怪的行为。每当我的库(带有过滤器的库)对另一个休息服务进行远程调用(我这样做是为了根据响应评估某些逻辑),当该服务返回响应时,在返回之前,再次应用过滤器,并且当然,我不希望这种行为。
我 100% 确定这是导致第二次调用过滤器的原因,因为如果我省略其余调用,则过滤器仅应用一次。
解决方案
使用 FilterRegistrationBean
@Bean
public FilterRegistrationBean<MyFilter> loggingFilter(){
FilterRegistrationBean<MyFilter> registrationBean
= new FilterRegistrationBean<>();
registrationBean.setFilter(new MyFilter());
registrationBean.addUrlPatterns("/users/*");
return registrationBean;
}
推荐阅读
- mongodb - 在成功运行 Spring Boot 应用程序时,MongoDB 身份验证开始意外失败
- python - 将 Python 列表逐行写入 csv 文件
- android - 在颤振上接收到 Firebase 云消息时没有任何反应
- javascript - 使用 jquery 表单验证,但即使无效仍会弹出模态
- c# - 二叉搜索树并使用递归方法找到它的高度
- reporting-services - SSRS 条件分组
- google-sheets - 如何放置 2 个公式而不是范围
- api - 在 Jmeter 中是否有可能通过在浏览器中渲染页面来获得整体响应时间
- postgresql - 如何限制接收到的json可以容纳的字段数?
- java - 在 Java 中从头开始为链接字典实现 isEmpty()