我使用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;
}
答案 0 :(得分:3)
默认情况下,SimpleWebServiceInboundGateway
不会映射传输标头。
见DefaultSoapHeaderMapper
。
当然你可以实现自己的,但这可能足以让你使用:
((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes())
.getRequest()
.getRemoteAddr();
表示您的目标@ServiceActivator
。
当然,如果您不在服务激活器之前将消息转移到其他线程,那么这将起作用。 RequestContextHolder.currentRequestAttributes()
与ThreadLocal
绑定。
答案 1 :(得分: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);
}
}