java - 如何从单例 spring bean 内部访问 ServletRequest?

标签 java spring

我有一个单例 spring bean,它被调用以响应某些客户端操作。 我希望捕获有关客户端的一些信息(特别是 IP 地址)。我假设此信息的最佳来源是请求对象。我如何从我的 bean 中获取对请求对象的访问权?

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

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

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

但是由于 currentRequestAttributes 中的 IllegalStateException 而失败。异常文本建议使用 RequestContextListenerRequestContextFilter

我找到了 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/

相关文章:

java - 动态可编辑复选框

Spring session 处理: HttpSessionDestroyedEvent not received

java - Java中order by子句的SQL注入(inject)漏洞

java - 如何在 Java 中处理 128 位小端乘法而不求助于 BigInteger

java - 为什么将 Mapper 和 Reducer 类声明为静态的?

Java 8 : get average of more than one attribute

java - spring-mvc 应用程序的模板和布局

java spring 在第一次请求时填充表单的值

java - 如何解决 outbound-gateway 不允许使用 http-method

java - iOS map 上的位置错误