如何从单例spring bean中访问ServletRequest?

时间:2010-09-02 20:06:29

标签: java spring

我有一个单独的spring bean,正在响应一些客户端操作而被调用。 我想捕获一些有关客户端的信息(特别是IP地址)。我假设这个信息的最佳来源是请求对象。如何从我的bean内部获取对请求对象的访问权限?

请原谅我,如果这是一个显而易见的问题,我对Spring很新。

我尝试过一件事没有成功。:

((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes())
.getRequest().getRemoteAddr();

但是currentRequestAttributes的IllegalStateException失败了。异常文本建议使用RequestContextListenerRequestContextFilter

我找到了reference如何配置RequestContextListener,但我仍然不知道要更改我的bean以便我可以访问请求信息。

1 个答案:

答案 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应用程序?