我正在尝试获取我的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
,因此不确定该代码是否适合您,但希望对您有所帮助。