【发布时间】:2015-11-19 13:24:52
【问题描述】:
我正在尝试获取我的 JAX-WS SOAP Web 服务客户端的 IP 地址(欢迎使用替代解决方案)。
我正在使用以下代码,它适用于另一个项目,但是当我从 javax.xml.ws 获取它时,这个项目(与 Spring 3.2.4 集成)返回一个 null HttpServletRequest .WebServiceContext(WebServiceContext 不为空):
@Resource
WebServiceContext wsContext;
private String getRemoteIpAddress()
{
MessageContext context = this.wsContext.getMessageContext();
HttpServletRequest httpRequest = (HttpServletRequest) context.get(MessageContext.SERVLET_REQUEST);
String remoteIpAddress = httpRequest.getRemoteAddr();
为了更清楚,这是这个 Web 服务类的样子:
@WebService(name = "PService", targetNamespace = "http://server.ps/")
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
public class PSystemServiceEndpoint extends SpringBeanAutowiringSupport
需要注意的是,该应用程序作为独立 Java 应用程序运行,并包含 Jetty 嵌入服务器。
【问题讨论】:
-
基于 Spring 的组件通常是单例的,因此注入只进行一次。因此,您将在应用程序开始时重用
WebServiceContext,我非常怀疑它是否具有HttpServletRequest,也不具有正确的HttpServletRequest。 -
感谢您的回答,但我正在寻找获取客户端远程 IP 地址的替代方法。
标签: java spring web-services jakarta-ee jax-ws