我使用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
绑定在一起。