java - 如何使用 Apache CXF 将 web 服务客户端绑定(bind)到指定的 IP(网络接口(interface))?

标签 java networking jboss cxf

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

  • eth0,IP 为 10.100.0.1
  • IP 为 10.100.100.1 的 eth1

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

现在,配置问题。

当JBoss需要监听eth0上传入的数据,IP10.100.0.1,需要run.sh加上“-b”开关:run.sh -b 10.100.0.1,很简单干净。

但我想扩展我的问题:我想强制 JBoss 调用其他主机上的 Web 服务,并将 10.100.100.1 作为网络流量的源 IP。怎么做?是否有任何开关/属性/任何东西可以完成这项工作?

总结:

JBoss 绑定(bind)到 eth0 以监听 10.100.0.1 上的传入数据,并在 10.200.0.1 上调用源 IP 10.100.100.1 的网络服务.

请帮助我,非常感谢任何想法。我想避免任何 iptables/xinted 重定向配置:-)

问候,

马吕斯

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

bootstrap.setOption("localAddress", new InetSocketAddress(localAddress, 0));

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

最佳答案

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

我建议让它只通过 eth1 可用,然后让 jboss 监听两个接口(interface)。然后 Jboss 会愉快地选择路由流量所需的任何源地址。

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

关于java - 如何使用 Apache CXF 将 web 服务客户端绑定(bind)到指定的 IP(网络接口(interface))?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4516948/

相关文章:

java - 将 int 转换为 String

Windows 7 : sniff TCP sockets to localhost

java - WebService 端点未部署在 jboss eap 6 上

java - MSC000001 : Failed to start service jboss. web.deployment.default-host./scWeb ..... JBAS018040:无法启动上下文

c++ - 在 C Linux 中通过套接字发送图像 (JPEG)

jboss - 用于高性能/关键任务应用程序的 JRuby/TorqueBox

java - 以编程方式将 Oracle BPEL 任务标记为完成

java - LastIndexOf 和 java.lang.IndexOutOfBoundsException

java - 如何获取不是 .jpeg、.gif、.bmp 或 .png 的文件的 BufferedImage

ssl - 确定 TCP 连接是否使用 SSL