java - 为什么 MessageContext 中的 HttpServletRequest 为 null?

标签 java spring web-services jakarta-ee jax-ws

我正在尝试获取 JAX-WS SOAP Web 服务客户端的 IP 地址(欢迎提供替代解决方案)。

我正在使用以下代码,该代码适用于另一个项目,但是当我从 javax.xml.ws.WebServiceContext 中获取该项目(与 Spring 3.2.4 集成)时,该项目(与 Spring 3.2.4 集成)返回 null HttpServletRequest(WebServiceContext not null):

@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 Embeeded Server

最佳答案

我也使用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,因此我不确定此代码是否适合您,但我希望它有所帮助。

关于java - 为什么 MessageContext 中的 HttpServletRequest 为 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33805219/

相关文章:

Java无限数组

java - 注销后无法使用 Facebook 凭据登录

java - 如何在 Java 中延迟消息对话框?

spring - 构建后、部署前的属性文件配置

c# - 从 Web 服务读取 XML 或对象

java - 使用Java程序填写Git凭证

hibernate - Spring JSF OpenSessionInViewFilter

spring - JpaRepository 删除子元素

asp.net - 使用 Web 服务时出现对象移动错误

.net - 将 ADO.Net 数据服务应用程序推出到 IIS 时出现问题