2016-07-27 37 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); 
    } 
}