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