Каковы допустимые форматы регулярного выражения для свойства nonProxyHosts в Java? - PullRequest
5 голосов
/ 02 ноября 2010

При использовании свойств proxyHost, proxyPort и nonProxyHosts в Java для изменения соединения URL, какие допустимые подстановочные знаки используются в свойстве nonProxyHosts? Могу ли я сделать что-нибудь или все из следующего?

  1. явное имя сервера: nonProxyHosts=server.company.com
  2. любой сервер в поддомене: nonProxyHosts=*.local.company.com
  3. определенный сервер по IP-адресу: nonProxyHosts=192.168.101.110
  4. любой сервер в подсети: nonProxyHosts=192.168.101.*
  5. любой сервер в подсети: nonProxyHosts=192.168.101/23

Существуют ли другие типы узоров?

Спасибо!

Ответы [ 3 ]

4 голосов
/ 02 ноября 2010

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

Edit:
Или не совсем. Похоже, sun.misc.RegexpPool обрабатывает только те строки, которые начинаются или заканчиваются на «*». Так что я думаю, это действительно сводится к тому, чтобы просто использовать префикс и суффикс подстановочных знаков ...

Edit2:
Быстрый способ проверить это использовать:

ProxySelector.getDefault().select(URI.create("...myURI..."));

Который вернет List<Proxy>. Селектор прокси по умолчанию - sun.net.spi.DefaultProxySelector, но его можно переопределить.

2 голосов
/ 02 ноября 2010

http://download.oracle.com/javase/1.4.2/docs/guide/net/properties.html говорит:

http.nonProxyHosts указывает хосты, которые должны быть подключены слишком напрямую, а не через прокси-сервер. Значение может быть списком хостов, каждый из которых разделен знаком |, и Кроме того, подстановочный знак (*) может использоваться для сопоставления . Например:

-Dhttp.nonProxyHosts = "* foo.com |. Локальный".

1 голос
/ 29 июня 2013

Проверьте исходный код OpenJDK для классов sun.net.spi.DefaultProxySelector и sun.misc.Regexp. Системное свойство nonProxyHosts обрабатывается для Sun JVM. Класс Regexp был написан самим Java-пользователем Джеймсом Гослингом, согласно комментарию @author javadoc. Все, что он делает, это соответствует * регулярным выражениям в любом месте строки (начало, середина и конец). Таким образом, вы можете сделать частичные имена хостов, а также частичные IP-адреса, такие как host12* или 10.*, чтобы соответствовать всем именам хостов, начинающимся с host12 или всем IP-адресам, начинающимся с 10.. Кроме того, DefaultProxySelector обнаруживает localhost и 127.0.0.1 в прокси-URL-адресах и автоматически исключает их. Поэтому вам не нужно добавлять их в nonProxyHosts, если речь идет о Sun JVM.

Теперь в Weblogic, похоже, есть свои собственные классы weblogic.net, которые работают с одинаковыми сетевыми свойствами Sun System, но не всегда одинаково. У меня нет удобного источника Weblogic, но я хочу сказать, что не только Sun JDK использует эти свойства. YMMV с различными реализациями прокси из-за ошибок или различной семантики или интерпретаций поведения и документов Sun.

Исходная версия OpenJDK, на которую я ссылался, была из openjdk-6 в http://download.java.net/openjdk/jdk6/.

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