JNDI – zabezpečenie prístupu a riešenie častých problémov s JNDI
Niektorí poskytovatelia adresárových služieb, ako je LDAP, môžu vyžadovať od klienta prístupové meno a heslo pri snahe o pripojení a hľadaní objektov v rámci namespace. Spôsob, ako obvykle splniť požiadavky poskytovateľa, je nastaviť potrebné premenné prostredia pre InitialContext. V tomto článku sa pozrieme, ako na to. V závere si vysvetlíme riešenie bežných problémov, s ktorými sa môžeme stretnúť pri práci s JNDI.
V rozhraní javax.naming.Context
sú definované štyri základné premenné prostredia, ktoré vám môžu pomôcť s definovaním úrovne zabezpečenia pri komunikácii s JNDI. Sú to tieto premenné:
java.naming.security.authentication
java.naming.security.principal
java.naming.security.credentials
java.naming.security.protocol
Prvá z nich definuje úroveň zabezpečenia, ktorú použijete pri vytváraní objektu javax.naming.InitialContext
. Sú tri základné úrovne zabezpečenia, ktoré môžete použiť pri JNDI. Treba vedieť, že premenné prostredia je nutné nastaviť ešte pred vytvorením spomínaného objektu. Použiť teda môžeme tieto tri úrovne:
none
simple
strong
Čo sa týka samotného spôsobu nastavenia premennej, nastaví sa úplne rovnakým spôsobom ako akákoľvek iná premenná prostredia. Ak si dobre pamätáte, tak pre JNDI sa nastavujú premenné v konfiguračnom súbore jndi.properties nasledovným spôsobom:
java.naming.security.authentication=simple
Alebo ich môžete nastaviť priamo v zdrojovom kóde, ak predáte požadovaný parameter konštruktoru triedy javax.naming.InitialContext
. Malo by to ísť nasledovným spôsobom:
properties.put(Context.SECURITY_AUTHENTICATION,“simple“);
Myslím, že je úplne jasné, že hore uvedené zápisy povedia službe JNDI, že chcete použiť jednoduchú úroveň zabezpečenia. Ak použijete úroveň simple
alebo strong
, musíte ešte zadať potrebné hodnoty pre premenné java.naming.security.principal
a java.naming.security.credentials
. Prvá z nich obvykle reprezentuje užívateľské meno alebo tiež login a druhá heslo pre daný login.
Ak nepoužijete premennú prostredia java.naming.security.authentication
, potom ďalší postup závisí od samotnej implementácie služby JNDI. Niektoré automaticky nastavia úroveň na none
a použijú login a password guest
a iné budú jednoducho ignorovať vaše nastavenia.
Pri použití úrovne zabezpečenia strong
budete musieť poskytnúť aj digitálny certifikát ako štandardnú súčasť tohto typu vyššieho zabezpečenia. V závislosti na poskytovateľovi služby JNDI budete možno musieť zabezpečiť aj nastavenie štvrtej premennej prostredia, o ktorej sme si zatiaľ nič viac nepovedali – java.naming.security.protocol
. Niektorí poskytovatelia služieb túto hodnotu automaticky určia. Zrejme najpoužívanejší protokol je SSH.
Vo väčšine prípadov vám bude stačiť úroveň zabezpečenia simple
. Avšak je úplne na vás, respektíve na špecifických požiadavkách aplikácie, aká úroveň zabezpečenia bude voči klientom vyžadovaná.
Riešenia bežných problémov s JNDI
ClassNotFoundException
– vyhodenie výnimky- Ak pri pokuse o prístup k JNDI príde k vyhodeniu tejto výnimky, uistite sa, či máte jndi.jar a ostatné vyžadované knižnice umiestnené v systémovej classpath. Ak používate Java 2 SDK 1.3 či staršie, uistite sa, že táto verzia je podporovaná vaším poskytovateľom služby JNDI.
- Nekompatibilita na úrovni verzie Java platformy
- Ak vám vznikne výnimka týkajúca sa chýbajúcich Java súborov, bude to pravdepodobne spôsobené tým, že používate staršiu verziu Javy, konkrétne 1.2.2 alebo nižšiu. Samotné JNDI je podporované práve až vyššími verziami. Už napríklad verzia Java 2 SDK 1.3 by nemala mať s JNDI žiadny problém.
NoClassDefFoundError
– vyhodenie výnimky- Toto je pomerne známa runtime výnimka, ktorá vznikne vtedy, ak jeden alebo viac vyžadovaných tried nebolo nájdených v classpath. Podobne ako pri výnimke
ClassNotFoundException
treba sa uistiť, že všetky potrebné knižnice a triedy, vrátane jndi.jar, sú dostupné cez spomínanú premennú. NoInitialContextException
– vyhodenie výnimky- Toto sa vám môže stať, ak ste buď nešpecifikovali premennú prostredia
java.naming.initial.context
alebo ak túto premennú nie je možné nájsť. Premenná je vyžadovaná na to, aby ste mohli vytvoriť objektjavax.naming.InitialContext
. CommunicationException
– vyhodenie výnimky- Vyhodenie tejto výnimky môže mať niekoľko rôznych dôvodov, ale zrejme najčastejším býva nesprávne nastavenie informácie o tom, kde služba JNDI beží. Z toho dôvodu je vhodné skontrolovať, či nastavená informácia naozaj zodpovedá skutočnosti.
- Nie je možné lokalizovať súbor jndi.properties
- Správne umiestnenie tohto súboru je veľmi dôležité, pretože JNDI musí byť schopné ho lokalizovať. Obvykle, ak sa tento súbor nachádza niekde v classpath, nemal by byť problém s jeho nájdením. Ak to napriek tomu problém je, skúste ho umiestniť do adresára <JAVA_HOME>/lib. Ak máte na danom počítači viac ako jeden súbor jndi.properties, počítajte s tým, že použitý bude ten, ktorý bude nájdený ako prvý. Nikdy však neviete, ktorý to bude.
NameNotFoundException
– vyhodenie výnimky- Vyhodenie tejto výnimky najčastejšie znamená, že ste v metóde
lookup
špecifikovali parameter neexistujúci v rámci služby JNDI, alebo ste ho zadali nesprávne. Niektoré implementácie JNDI vás nútia používať pred samotným názvom parametra aj špeciálny prefixjava:/comp/env
, preto treba počítať aj s týmto variantom.
Záver
Týmto článkom sme dokončili sériu o technológii Java Naming and Directory Interface. Jeho hlavným cieľom bolo poskytnúť vám niektoré doplnkové a užitočné informácie k článkom o EJB 2.x – Enterprise JavaBeans 2.x, v ktorých sa pomerne často stretnete s vyžívaním možností tejto technológie.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Umělá inteligence v IT
27. září 2023 -
Členská sekce: 4 důvody proč ji mít na svém webu
12. března 2024
Nejnovější
-
Jak rozšířit úložiště Macu za pětinovou cenu?
16. prosince 2024 -
Nové trendy v doménách pro osobní projekty – DIY, LIVING a LIFESTYLE
9. prosince 2024 -
Jak chránit webové stránky před Web/AI Scrapingem
27. listopadu 2024 -
Jaký monitor je nejlepší k novému Macu Mini?
25. listopadu 2024