Java Naming and Directory Interface (JNDI) — Java-прикладний програмний інтерфейс для служб іменування та каталогів. Він дає Java-програмам змогу знаходити дані й ресурси у вигляді Java-об'єктів за їхніми іменами. JNDI не залежить від конкретної реалізації служби й визначає інтерфейс постачальника послуг (SPI), завдяки якому до системи можна підключати різні служби каталогів.
Дані, які знаходять через JNDI, можуть надходити із сервера, звичайного файла або бази даних — це визначає використана реалізація.
Застосування Типові застосування JNDI:
підключення Java-програми до зовнішньої служби каталогів, наприклад адресної бази або LDAP-сервера; пошук об'єктів у мережі для Java RMI та Jakarta EE; отримання сервлетом конфігураційних даних, наданих вебконтейнером; доступ до ресурсів на зразок пулів з'єднань із базами даних, черг повідомлень або поштових сеансів.
SPI дає змогу підтримувати практично будь-яку службу іменування чи каталогів, зокрема LDAP, DNS, NIS, службу імен CORBA і файлову систему.
Історія Sun Microsystems уперше оприлюднила специфікацію JNDI 10 березня 1997 року. Згодом API увійшов до стандартних бібліотек платформи Java.
Основні поняття JNDI впорядковує імена ієрархічно. Ім'ям може бути рядок, наприклад org.wikipedia.ejb.MyBean, або об'єкт, що реалізує інтерфейс javax.naming.Name. Ім'я зв'язують з об'єктом, зберігаючи в службі каталогів сам об'єкт або посилання на нього.
Ключове поняття API — контекст, який визначає простір пошуку об'єкта. Початковий контекст слугує відправною точкою, подібно до кореневого каталогу файлової системи. Найпростіший пошук має такий вигляд:
import javax.naming.Context; import javax.naming.InitialContext;
Context context = new InitialContext(); MyBean bean = (MyBean) context.lookup("com.example.MyBean");
Параметри реалізації — фабрику початкового контексту, адресу постачальника та, за потреби, облікові дані — задають у властивостях середовища або у файлі jndi.properties.
JNDI підтримує:
зв'язування об'єкта з іменем; загальні запити до каталогу; сповіщення про зміни записів; розширення LDAP; пошук об'єктів за атрибутами.
Безпека Можливість JNDI звертатися до віддалених служб стала одним із компонентів вразливості Log4Shell: за певних конфігурацій зловмисно сформовані дані могли спричинити JNDI-пошук на контрольованому нападником сервері та подальше виконання коду. У новіших версіях Java можливості віддаленого завантаження класів істотно обмежено.
Див. також Локатор служб (шаблон проєктування) Log4Shell
Примітки
Посилання Довідкова документація JNDI