2010-04-15 139 views
6

您如何获得发送肥皂请求的客户机的源IP,用户名,密码等?是否有任何这些细节可以用于记录目的?如何获取请求客户机的SOAP的源IP?

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

感谢,Lavanya

回答

0

我不是苏特我完全理解你获得的用户名和客户机的密码的想法。 通常Soap看Soap Header时,它们应该携带认证信息(可能是用户名,密码或某种安全toke)。 对于IP,你的Soap是通过Http来传递的,因此当你收到你的请求时,你可以试着看看你的Http头文件,看看它给你的信息。虽然我从来没有试图从它获取客户端的IP,但它可能在HTTP标头中。

+0

看起来像我将不得不尝试使用该HTTP头对象。有没有像默认情况下通过的头文件中的元数据,还是严格地把它放在头文件中? – user450937 2010-04-15 19:03:33

0

您正在使用什么肥皂堆栈。如果你将它作为一个使用轴的战争文件进行部署,这很容易做到。你需要掌握httprequestobject并调用HTTPServletRequest.getRemoteAddr()方法。

+0

该服务以.jar文件运行。 然后我使用我的WSDL文件来创建和启动请求。 – user450937 2010-04-15 19:00:24

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(); 
    } 
} 

将返回类似:在API

IP: 127.0.0.1, Port: 2636, Host: localhost

查找的方法,其余。基本上,一旦你有你的HttpServletRequest对象,其余的很容易。

+2

这个答案应该被接受。我用这种方法,它完美的作品! – membersound 2012-08-08 16:29:05

+0

我正在使用以下方法,但我没有发现它正常工作。你有没有使用上述类的例子。这将是非常有帮助的。 – Saikat1529 2017-11-14 09:37:14

+0

@ Saikat1529鉴于这个答案是7岁以上,我建议你问一个新问题 – Catchwa 2017-11-14 22:33:52

0

我算出的溶液象下面 -

@Endpoint 
public class DataEndpoints { 
.... 
.... 
    private HttpServletRequest httpServletRequest; 

    @Autowired 
    public void setRequest(HttpServletRequest request) { 
     this.httpServletRequest = request; 
    } 


    @PayloadRoot(namespace = employeeNS, localPart = "syncRelation") 
    @ResponsePayload 
    public SyncRelationResponse dataSync(@RequestPayload SyncOrderRelation request) { 
      String incoming = "IP Address -> " + this.httpServletRequest.getRemoteAddr(); 
    } 
} 

通过使用以下的方法,我可以直接访问的HttpServletRequest。然后我可以访问我需要的所有数据。

我希望它能在这方面帮助别人。