前言
最近在学习filter相关的内容,有了以下的代码
@Configuration
@WebFilter
@Slf4j
public class TestFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
String url=servletRequest.getLocalAddr();
System.out.println(url);
//如果不进行下一步则会被直接过滤掉
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
}
}
诡异的一个事情发生了,就是中间的println会被触发两次,换言之就是这个filter被触发了两次。这和常规的触发器情况不太符合。
排查
找到了这个链接 https://segmentfault.com/q/1010000042024741 提到了一个现象就是重复注册问题。
解决
既然是重复注册,那就一定是开头的组件注册有问题了。观察到在这里既声明了WebFilter又用了Configuration,那我们注释其中一个试试。
结果filter的拦截就恢复正常了。