我正在尝试获取 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/