繁体   English   中英

将对象从Spring HandlerInterceptor传递到Servlet过滤器

[英]Passing object from Spring HandlerInterceptor to Servlet Filter

有一个webapp,其中每个请求都消耗各种外部资源。 Webapp使用请求挖出的Bean跟踪那些消耗的资源。 然后,HandlerInterceptor的afterCompletion方法调用TaskExecutor将此信息存储在DB中。 一切都很好,但是有增加带宽消耗作为另一种资源的要求。 计算传出响应大小是Servlet过滤器的典型任务(以及响应包装和自定义流实现)。 这样就完成了,并且还在工作。

问题是我想将两件事汇总在一起。 显然,我无法将“已发送的字节数”传递给Spring HandlerInterceptor,因为过滤器的doFilter()尚未完成,并且在拦截器运行时不知道发送的字节数。 因此,筛选器必须是聚合所有资源使用情况并启动异步任务以将其存储在数据库中的地方。 问题是:如何将数据从HandlerInterceptor传递到Filter。 我尝试了简单的request.setAttribute(),但令人惊讶的是它没有用。

附带说明:我知道请求瓢状豆的生命周期,并且在处理程序中,我正在创建一个简单的POJO,其中填充了瓢状豆中的数据。

问题原来是很简单的。 该应用程序做了很多转发/调度,作为常规请求处理的一部分。 事实证明,调用了my过滤器(到目前为止,效果很好),然后链中的另一个过滤器在进行转发/调度,然后进行了实际的请求处理。 默认过滤器设置仅捕获简单请求,并且您需要其他配置(web.xml)来过滤转发/调度。 我只是这样做,就解决了问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM