GenericFilterBean呼叫的doFilter()在春季启动后返回

问题描述 投票:0回答:1

我使用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后返回()?

它是处理这种情况下,正确的方式?

spring-boot spring-mvc spring-security filter servlet-filters
1个回答
1
投票

您的代码将始终调用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();

        }

    }
© www.soinside.com 2019 - 2024. All rights reserved.