Java spring-如何将值从应用程序传递到过滤器
因此,我需要在spring应用程序中添加一个过滤器,以便在将响应刷新回客户端后,写入日志文件。我要写入日志文件的值是在应用程序中确定的。换句话说,我希望将值(理想情况下是值的hashmap)传递给主处理完成后的过滤器 有没有一种最佳实践方法可以做到这一点?我可以想象,当请求第一次进入时,我可以在过滤器中实例化hashMap,将该hashMap隐藏在某个地方(在哪里?),在应用程序中检索并写入,然后在退出过滤器中再次检索并写出值。这是最好的做法吗?如果是这样: 1) 我是否只有一个在进入和退出时启动的过滤器,或者我需要设置两个,一个用于应用前,一个用于应用后 2) 存放数据存储的最佳实践地点在哪里Java spring-如何将值从应用程序传递到过滤器,java,spring,servlet-filters,Java,Spring,Servlet Filters,因此,我需要在spring应用程序中添加一个过滤器,以便在将响应刷新回客户端后,写入日志文件。我要写入日志文件的值是在应用程序中确定的。换句话说,我希望将值(理想情况下是值的hashmap)传递给主处理完成后的过滤器 有没有一种最佳实践方法可以做到这一点?我可以想象,当请求第一次进入时,我可以在过滤器中实例化hashMap,将该hashMap隐藏在某个地方(在哪里?),在应用程序中检索并写入,然后在退出过滤器中再次检索并写出值。这是最好的做法吗?如果是这样: 1) 我是否只有一个在进入和退出时启
chain.doFilter(request, wrapper);
//在servlet完成处理之后。在这里检索数据@Adi的回答解释了如何使用单个过滤器和过滤器链接来完成这项工作
但是,我建议您使用
ServletRequest.getAttribute(…)
和ServletRequest.setAttribute(…),而不是使用ThreadLocal
;查看API文档。Hmm。阅读文档时,我有一种不愉快的感觉,即过滤器只有在处理到达servlet之前才会启动。是吗?在servlet完成后,我如何才能让事情发生?谢谢!太好了-谢谢-这真的很有帮助。我没有意识到doFilter方法是这样链接的。这太完美了…对于变量,您如何看待request.setAttribute(“mydatahash”,new HashMap())或者类似的东西-我在某处看到了-使用请求作为数据存储?是的,使用请求作为数据存储是更好的方法。您不必担心清理ThreadLocal变量。有时我们需要填充在servlet层之外访问的数据(示例dao)在这种情况下,使用ThreadLocal是有意义的。Spring security的SecurityContextHolder就是ThreadLocal用法的一个例子。