Как настроить разрешение хоста для использования универсального преобразователя хоста в Java

В JDK 8 java.net.InetAddress разрешает имена хостов, используя преобразователь имен хостов по умолчанию на локальном компьютере:

Преобразование имени хоста в IP-адрес достигается за счет использования комбинации информации о конфигурации локального компьютера и сетевых служб именования, таких как система доменных имен (DNS) и служба сетевой информации (NIS). Конкретные используемые службы именования по умолчанию настроены на локальном компьютере. Для любого имени хоста возвращается соответствующий ему IP-адрес.

В JDK 19 java.net.InetAddress работает так же, но также есть возможность использовать пользовательскую конфигурацию:

Встроенная реализация преобразователя InetAddress выполняет преобразование имени хоста в IP-адрес и наоборот за счет использования комбинации информации о конфигурации локального компьютера и сетевых служб именования, таких как система доменных имен (DNS) и упрощенный каталог. Протокол доступа (LDAP). Конкретные службы именования, используемые встроенным преобразователем, по умолчанию зависят от конфигурации локального компьютера. InetAddress имеет механизм поставщика услуг для преобразователей InetAddress, который позволяет использовать пользовательский преобразователь InetAddress вместо встроенной реализации.

Итак, как мы можем настроить это поведение, не изменяя преобразователь имен хостов по умолчанию на локальной машине универсальным способом, который работает для Java 8 и более поздних версий?

В этой ситуации Инструменты Burningwave приходят нам на помощь, предоставляя нам HostResolutionRequestInterceptor, который позволяет нам:

  • использовать собственный распознаватель вместо стандартного
  • чтобы добавить пользовательский распознаватель к стандартному
  • чтобы отложить пользовательский распознаватель до значения по умолчанию

Чтобы включить Burningwave Tools в наш проект, нам нужно добавить следующую зависимость в наш pom.xml:

И чтобы установить компонент HostResolutionRequestInterceptor, мы должны действовать следующим образом:

Burningwave Tools также предоставляет преобразователь хоста на основе подключения к DNS-серверу:

Но вы также можете определить новый пользовательский преобразователь, реализовав интерфейс HostResolver, который создает запросы пакетов DNS, отправляет их на серверы через java.net.DatagramSocket и анализирует ответы:

Если мы добавим в наш проект Jackson framework, мы можем добавить конфигурацию через поддержку файла yaml с помощью нескольких строк кода, используя компонент PathHelper:

Из здесь вы можете загрузить/клонировать руководство, размещенное на GitHub.