SimpleWebServiceInboundGateway

SimpleWebServiceInboundGateway

我使用Spring集成进行Web服务消息处理。不幸的是,消息不包含发送者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;
}

最佳答案

默认情况下,SimpleWebServiceInboundGateway不映射传输头。
参见DefaultSoapHeaderMapper
当然,您可以实现自己的实现,但这实际上足以让您使用:

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

在那你的目标@ServiceActivator

如果您在服务激活器之前不将消息转移到其他线程,那当然可以。 RequestContextHolder.currentRequestAttributes()ThreadLocal绑定在一起。

10-07 20:39