【问题标题】:How to get the sender IP Address in spring integration?如何在spring集成中获取发件人IP地址?
【发布时间】:2016-12-01 15:50:10
【问题描述】:

我使用 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;
}

【问题讨论】:

标签: java spring spring-integration


【解决方案1】:

您可以从 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);
    }
}

【讨论】:

    【解决方案2】:

    SimpleWebServiceInboundGateway 默认情况下不映射传输标头。 见DefaultSoapHeaderMapper。 当然你也可以实现你自己的,但这对你来说可能已经足够了:

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

    你的目标@ServiceActivator

    当然,如果您不在服务激活器之前将消息转移到不同的线程,这将起作用。 RequestContextHolder.currentRequestAttributes()ThreadLocal 绑定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-08
      • 1970-01-01
      • 2012-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-26
      相关资源
      最近更新 更多