如何使用Apache CXF将Web服务客户端绑定到特定的IP(网络接口)?

时间:2010-12-23 08:18:35

标签: java networking jboss cxf

我的问题是:有一个配置了2个NIC的RHEL默认服务器:

  • eth0 with IP 10.100.0.1
  • eth1 with IP 10.100.100.1

另外,在Red Hat上安装了jboss-6.0.0.20101110-CR1,在这个JBoss上部署了EAR,这是一个简单的servlet侦听传入的数据,经过一些处理,应用程序将处理后的数据转发到另一个Web使用Apache CXF框架(具有某些处理的代理)在另一台主机上(例如10.200.0.1)进行服务。

现在,配置问题。

当JBoss需要监听eth0上的传入数据时,IP 10.100.0.1 ,需要运行带有“-b”的run.sh:run.sh -b 10.100.0.1,这很简单干净。

但我想扩展我的问题:我想强制JBoss在其他主机上使用 10.100.100.1 作为网络流量的源IP来调用Web服务。怎么做?是否有任何开关/财产/其他什么工作?

要点:

JBoss绑定到eth0以侦听 10.100.0.1 上的传入数据,并在 10.200.0.1 上调用源IP 10.100.100.1 的webservice

请帮助我,任何想法都是真正的。我想避免任何iptables / xinted重定向配置: - )

此致

马里乌什

PS。我在我的公司找到了另一个类似的问题(但本机JBoss WS相关......):我们的一个软件提供商修改了JBoss5的jbossws-native-core.jar,通过添加行来强制执行此行为:

bootstrap.setOption(“localAddress”,new InetSocketAddress(localAddress,0));

到NettyClient.java,当localAddress提供-D开关并由代码中的getProperty()方法重写时。但我也想避免任何JBoss组件修改...

1 个答案:

答案 0 :(得分:0)

如果JBoss只在一个ip上进行监听,那么就可以轻松地使用相同的ip进行回复。我建议你用路由解决这个问题,而不是用java中的黑客攻击。我认为,因为它已经在工作,所以10.200.0.1实际上可以通过eth0和eth1访问。

我建议只能通过eth1使用,然后让jboss监听这两个接口。然后Jboss会愉快地选择获得流量路由所需的源地址。

你可能需要在远程端有一些相应的路由,如果你有一些特殊的原因你只想听一个接口,或者,如果你不能控制它,你可以编写一个servlet过滤器来删除/拒绝所有到达错误的目的地ip的流量。