我正在尝试获取我的JAX-WS SOAP Web服务的客户端的IP地址(赞赏一种替代解决方案)。

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

@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,因此不确定该代码是否适合您,但希望对您有所帮助。

09-26 22:43