spring-boot - 在 Spring Boot 上调用 GenericFilterBean 的 doFilter() 后返回
问题描述
我在我的 Spring 引导项目中使用 GenericFilterBean 作为过滤器。
在某些情况下,我想在我的过滤器逻辑上传递下一个过滤器。
我的过滤器如下所示;
public class MyFilter extends GenericFilterBean {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
if (anyCondition){
chain.doFilter();
return;
}
if (anyCondition){
chain.doFilter();
return;
}
if (anyCondition){
chain.doFilter();
return;
}
chain.doFilter();
}
}
如果我不返回,它会调用其他 chain.doFilter(),这就是我返回的方式。
在调用 chain.doFilter() 之后会导致返回任何问题吗?
这是处理这种情况的正确方法吗?
解决方案
您的代码将始终调用chain.doFilter
(不是 doChain)
例如
public class MyFilter extends GenericFilterBean {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
//this gets executed before other filters
some code here
//now we execute other filters
chain.doFilter(request, response);
//this code gets executed after the 'next' filters are done
some code here
}
}
但是您的代码总是执行下一个过滤器然后完成。你的代码很好,但你可以用一个if then else
语句来代替
public class MyFilter extends GenericFilterBean {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
if (condition1){
//do something for condition1
} else if (condition2) {
//do something for condition2
} else if (condition3) {
//do something for condition3
}
chain.doChain();
}
}
推荐阅读
- javascript - 如何使用 AJAX 将幻灯片添加到 swiper?
- rust - 为什么我不能可变地移动捕获不可变的变量?
- ibm-cloud - 在 IBM 云上的 LogDNA 中创建新的日志记录实例时出错
- ios - AVAudioSessionRouteChange Audiokit 在蓝牙连接打开/关闭时崩溃
- ruby-on-rails - 查询集合父模型的最有效方法是什么?
- ckan - Requiring Login on CKAN
- android-studio - 请问我如何同时用户用一根手指触摸屏幕我希望用户能够用另一根手指启动onClick按钮功能
- wpf - 在椭圆填充中实现 ColorAnimation 的问题
- objective-c - Google 版权信息未显示在 iPhone 的 GMSMapView 中,但显示在 iPad 中
- powershell - .ps1 中定义的别名在 .bat 中无法识别