Как привязать клиента веб-сервиса к указанному IP (сетевому интерфейсу) с помощью Apache CXF? - PullRequest
4 голосов
/ 23 декабря 2010

Мои проблемы: существует один сервер по умолчанию RHEL с настроенной 2 NIC:

  • eth0 с IP 10.100.0.1
  • eth1 с IP 10.100.100.1

Также в Red Hat установлен jboss-6.0.0.20101110-CR1 с EAR, развернутым на этом JBoss, который представляет собой простой сервлет для прослушивания входящих данных, и после некоторой обработки приложение пересылает обработанные данные вдругой веб-сервис на другом хосте (например, 10.200.0.1), использующий платформу Apache CXF (такой прокси-сервер с некоторыми процессами обработки).

Теперь проблемы с конфигурацией.

Когда JBoss необходимо прослушиватьвходящие данные по eth0, IP 10.100.0.1 , должны быть запущены в файле run.sh с ключом -b: run.sh -b 10.100.0.1, который прост и понятен.

Но я хочу расширить мою проблему: я хочу заставить JBoss вызывать веб-сервис на другом хосте с 10.100.100.1 в качестве исходного IP-адреса для сетевого трафика.Как это сделать?Есть ли какой-либо переключатель / свойство / что-либо, что выполняет работу?

Резюме:

JBoss связывается с eth0 для прослушивания входящих данных на 10.100.0.1 и вызывает webserviceс IP-адресом источника 10.100.100.1 на 10.200.0.1 .

Пожалуйста, помогите мне, любые идеи действительно ценятся.Я хочу избежать любых настроек iptables / xinted redirect: -)

С уважением,

Mariusz

PS.Я обнаружил еще одну похожую проблему (но связанную с JBoss WS ...) в моей компании: один из наших поставщиков программного обеспечения изменил JBoss5 jbossws-native-core.jar, чтобы заставить это поведение добавить строку:

bootstrap.setOption ("localAddress", новый InetSocketAddress (localAddress, 0));

в NettyClient.java, когда localAddress предоставляется с ключом -D и читается методом getProperty ()в коде.Но я также хочу избежать любой модификации компонентов JBoss ...

1 Ответ

0 голосов
/ 02 февраля 2011

Если JBoss прослушивает только один ip, это все, что он сможет легко ответить тем же ip.Я бы посоветовал вам решить это с маршрутизацией, а не со взломом в Java.Я предполагаю, потому что это уже работает, что 10.200.0.1 фактически доступен через eth0 и eth1.

Я предлагаю сделать его доступным только через eth1, а затем jboss прослушивать оба интерфейса.Затем Jboss с радостью выберет любой адрес источника, необходимый для маршрутизации трафика.

Вам может потребоваться некоторая соответствующая маршрутизация на удаленной стороне, если у вас была какая-то конкретная причина, по которой вы хотели прослушивать только один интерфейс, или, если вы не можете это контролировать, вы можете написать фильтр сервлетов, чтобы отбрасывать / отклонять весь трафик, поступающий с неверным IP-адресом назначения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...