我有一个单例 spring bean,它被调用以响应某些客户端操作。 我希望捕获有关客户端的一些信息(特别是 IP 地址)。我假设此信息的最佳来源是请求对象。我如何从我的 bean 中获取对请求对象的访问权?
如果这是一个显而易见的问题,请原谅我,我是 Spring 的新手。
我试过一件事没有成功。:
((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes())
.getRequest().getRemoteAddr();
但是由于 currentRequestAttributes
中的 IllegalStateException 而失败。异常文本建议使用 RequestContextListener
或 RequestContextFilter
我找到了 reference了解如何配置 RequestContextListener
,但我仍然不知道如何更改我的 bean 以便我可以访问请求信息。
最佳答案
RequestContextListener
被添加到 web.xml
中,这会将当前请求与当前线程相关联。然后以您已经尝试过的方式通过 RequestContextHolder
检索此线程关联。
所以只需将 RequestContextListener
放入 web.xml
中,您的代码就应该开始工作了:
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
RequestContextListener
在 Spring MVC 应用程序中通常不需要,因为 DispatcherServlet
会自动执行。我假设这不是 Spring MVC 应用程序?
关于java - 如何从单例 spring bean 内部访问 ServletRequest?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3630792/