我使用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();
}
}