如何获取SOAP请求客户端计算机的源IP?

use*_*937 6 java web-services

你如何获得发送soap请求的客户端机器的源IP,用户名,密码等?是否存在可以用于记录目的的任何这些细节?

我正在使用Java来处理传入的SOAP请求.该服务只添加2个号码并且正在运行,但我只需要获取一些客户端详细信息.

谢谢,拉瓦尼亚

Cat*_*hwa 17

如果您正在使用JAX-WS,请注入WebServiceContext,如下所示:

import javax.annotation.Resource
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.servlet.http.HttpServletRequest;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.handler.MessageContext;


@WebService()
public class Test
{
  @Resource WebServiceContext context;

  @WebMethod(operationName = "getInfo")
  public String getInfo()
  {
    HttpServletRequest request = (HttpServletRequest)context.getMessageContext().get(MessageContext.SERVLET_REQUEST);
    return "IP: "+request.getRemoteAddr()+", Port: "+request.getRemotePort()+", Host: "+request.getRemoteHost();
  }
}
Run Code Online (Sandbox Code Playgroud)

将返回如下内容:

IP: 127.0.0.1, Port: 2636, Host: localhost

查看其余方法的API.基本上,一旦你有了你的HttpServletRequest对象,剩下的就很容易了.

  • 这个答案应该被接受.我使用这种方法,它完美地运作! (2认同)

Faz*_*zal 0

我不确定我完全理解您获取客户端计算机的用户名和密码的想法。一般来说,使用 Soap 查看 Soap 标头,它们应该携带身份验证信息(可以是用户名、密码或某种安全令牌)。对于 IP,您的 Soap 是通过 Http 发送的,因此当您收到请求时,您可以尝试查看 Http 标头,看看它为您提供了哪些信息。虽然我从未尝试过从中获取客户端的IP,但它可能存在于HTTP标头中