Spring boot 在Spring引导上调用GenericFilterBean的doFilter()后返回

Spring boot 在Spring引导上调用GenericFilterBean的doFilter()后返回,spring-boot,spring-mvc,spring-security,filter,servlet-filters,Spring Boot,Spring Mvc,Spring Security,Filter,Servlet Filters,我在Spring boot项目中使用GenericFilterBean作为过滤器 在某些情况下,我希望传递过滤器逻辑上的下一个过滤器 我的过滤器如下所示 public class MyFilter extends GenericFilterBean { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws

我在Spring boot项目中使用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();

        }

    }
如果我不返回,它会调用other chain.doFilter,这就是我返回的方式

İt调用chain.doFilter后是否会导致任何问题返回


处理这种情况是否正确?

您的代码将始终调用chain.doFilter而不是doChain

比如说

公共类MyFilter扩展了GenericFilterBean{ @凌驾 public void doFilterServletRequest请求、ServletResponse响应、FilterChain链抛出IOException、ServletException{ HttpServletRequest HttpServletRequest=HttpServletRequest请求; //这将在其他筛选器之前执行 这里有一些代码 //现在我们执行其他过滤器 chain.doFilterrequest,响应; //此代码在完成“下一个”过滤器后执行 这里有一些代码 } } 但是您的代码总是执行下一个过滤器,然后就完成了。 您的代码很好,但是您可以使用if-then-else语句来实现

公共类MyFilter扩展了GenericFilterBean{ @凌驾 public void doFilterServletRequest请求、ServletResponse响应、FilterChain链抛出IOException、ServletException{ HttpServletRequest HttpServletRequest=HttpServletRequest请求; 如果条件1{ //为条件1做点什么 }否则,如果条件2{ //为条件2做点什么 }否则,如果条件3{ //为条件3做点什么 } 链多肯; } }
打电话给return没问题,但这是很多人不喜欢的风格。它会很好的工作,这意味着:1。调用下一个过滤器2。退出当前方法