我的春季启动版本是1.5.4,这是我的配置代码
@WebFilter(urlPatterns = "/*")
public class LogFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("LogFilter");
chain.doFilter(request, response);
}
//init and destroy
这是我的servlet过滤器代码
LogFilter
test
LogFilter <----the second time
当我访问http://localhost:8080/控制台已打印
时OutputStream imageStream = new FileOutputStream("yourImage.png");
yourImageBitmap.compress(CompressFormat.PNG, 100, imageStream);
imageStream.close();
为什么要调用过滤器两次?Spring boot为什么这样做?是否有相关文件或来源参考?我希望他打电话一次,我该怎么办?
更新:thx所有问题都已解决
答案 0 :(得分:2)
我可以想到这种行为的两个常见原因:
答案 1 :(得分:2)
答案 2 :(得分:2)
如果您尝试从doFilter方法记录请求url,您将明白原因。这是我创建新的SpringBoot项目并使用doFilter方法进行测试。
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
logger.info(request.getRequestURL().toString());
filterChain.doFilter(servletRequest,servletResponse);
}
好吧,这两个网址是
http://localhost:8080/index
http://localhost:8080/favicon.ico
答案 3 :(得分:1)
请检查您在其中定义过滤器的类是bean还是常规类。如果是Bean /组件,则无需在安全配置中专门注册过滤器,例如使用
http.addFilterBefore(new YourFilter(), BasicAuthenticationFilter.class).
通过如上所述另外注册一个bean,同一过滤器将执行两次。