2016-07-27 63 views
3

我使用Spring集成進行Web服務消息處理。不幸的是,該消息不包含發件人IP地址。我如何獲得這些信息?如何在春季集成中獲取發件人IP地址?

@Bean 
public SimpleWebServiceInboundGateway myInboundGateway() { 
    SimpleWebServiceInboundGateway simpleWebServiceInboundGateway = new SimpleWebServiceInboundGateway(); 
    simpleWebServiceInboundGateway.setRequestChannelName("testChannel"); 
    simpleWebServiceInboundGateway.setReplyChannelName("testResponseChannel"); 
    return simpleWebServiceInboundGateway; 
} 

@ServiceActivator(inputChannel = "testChannel", outputChannel = "testResponseChannel") 
public Message getHeaders(Message message) { 
    // how can I reach the sender IP address here 
    return message; 
} 
+0

可能與[此線程]重複(http://stackoverflow.com/questions/10363069/how-can-i-retrieve-ip-address-from-http-header-in-java) –

回答

3

SimpleWebServiceInboundGateway並不默認傳輸頭映射。 見DefaultSoapHeaderMapper。在你的目標@ServiceActivator

((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()) 
       .getRequest() 
       .getRemoteAddr(); 

: 當然,你可以實現你自己的,但真的可能足以供您使用。

當然,如果您不在服務激活器之前將消息轉移到其他線程,那麼這將起作用。 RequestContextHolder.currentRequestAttributes()ThreadLocal並列。

0

您可以從HttpServletRequest的檢索,使用的getRemoteAddr()來獲得訪問用戶的IP地址和getHeader()來獲取標頭值。這假設你可以修改你的控制器類。

或許這將幫助:

@Controller 
public class MyController { 
    @RequestMapping(value="/do-something") 
    public void doSomething(HttpServletRequest request) { 
     final String userIpAddress = request.getRemoteAddr(); 
     final String userAgent = request.getHeader("user-agent"); 
     System.out.println (userIpAddress); 
    } 
}