2010-04-15 60 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。然後我可以訪問我需要的所有數據。

我希望它能在這方面幫助別人。

相關問題