【问题标题】:Why is the HttpServletRequest null in the MessageContext?为什么 MessageContext 中的 HttpServletRequest 为空?
【发布时间】: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


【解决方案1】:

我也使用 Spring WS,当我需要从远程客户端获取 IP 时,我使用此功能

private String getIpRequest(){
    String result = "none";

    TransportContext context = TransportContextHolder.getTransportContext();

    if(context != null){
        HttpServletConnection connection = (HttpServletConnection)context.getConnection();
        if(connection != null){
            HttpServletRequest request = connection.getHttpServletRequest();
            if(request != null){
                result = request.getRemoteAddr();
            }
        }
    }

    return result;
}

如您所见,我没有使用WebServiceContext,而是使用WebServiceTemplate,所以我不确定这段代码是否适合您,但希望对您有所帮助。

【讨论】:

  • TransportContext 不在我的类路径中,我猜你使用的是 Spring 2,而不是 Spring 3.2;但是,这种方法看起来非常不错,因为我可以使用它将我的代码移到服务类之外。另一方面,我没有看到您在示例代码中提到的 WebServiceTemplate。
  • 该代码来自使用 Spring4.1.2.RELEASE 和 Spring-WS 2.2.0.RELEASE 的项目。你看不到 WebServiceTemplate 因为它没有出现在那段代码中,我告诉你的信息。
  • 好的,但是我不太了解 WebServiceTemplate。太糟糕了,你的解决方案还没有帮助我。谢谢。
猜你喜欢
  • 2012-01-21
  • 1970-01-01
  • 2011-06-14
  • 2021-09-23
  • 2018-06-26
  • 1970-01-01
  • 2011-10-21
  • 1970-01-01
  • 2019-09-28
相关资源
最近更新 更多