Pavasara LDAP ir pavasara sistēma, kas vienkāršo LDAP programmēšanu Java platformā. Šajā soli pa solim par pavasara LDAP izmantošanu jūs uzzināsiet, kā ietvarstruktūra apstrādā zema līmeņa kodēšanu, kas nepieciešama lielākajai daļai LDAP klientu, lai jūs varētu koncentrēties uz lietojumprogrammas biznesa loģikas izstrādi. Jūs arī praktizēsiet vienkāršas CRUD operācijas, izmantojot pavasara LDAP, un uzzināsiet par sarežģītākām darbībām, piemēram, dinamisku filtru izveidi un LDAP ierakstu pārveidošanu Java pupiņās.
Vieglā direktorija piekļuves protokols ir būtiska sastāvdaļa lielākajai daļai mūsdienīgu uzņēmuma lietojumprogrammu izvietošanas. LDAP galvenokārt izmanto, lai uzglabātu informāciju, kas saistīta ar lietotāja identitāti, piemēram, lietotāja lietotājvārdu, paroli un e-pasta adresi. To izmanto arī drošības ieviešanā, kur autentifikācijas un autorizācijas nolūkos ir nepieciešams glabāt lietotāju piekļuves tiesības.
Java Naming and Directory Interface (JDNI) ir API, ko izmanto LDAP programmēšanai Java platformā. Tas nosaka standarta saskarni, kuru var izmantot jūsu lietojumprogrammā, lai mijiedarbotos ar jebkuru LDAP serveri. Diemžēl JNDI izmantošana parasti nozīmē daudz zema līmeņa, atkārtotu kodu rakstīšanu. JNDI pārāk daudz strādā ar vienkāršām procedūrām, piemēram, nodrošina, ka resursi ir pareizi atvērti un slēgti. Turklāt lielākā daļa JNDI metožu pārbauda izņēmumus, kuru apstrāde ir laikietilpīga. Rūpīgi pārbaudot, šķiet, ka 50 līdz 60 procenti laika, kas pavadīts JNDI programmēšanai, tiek izšķiesti atkārtotu uzdevumu apstrādei.
Pavasara LDAP ir atvērtā koda Java bibliotēka, kas paredzēta, lai vienkāršotu LDAP programmēšanu Java platformā. Tāpat kā pavasara ietvarprogramma lielu daļu no Java uzņēmuma lietojumprogrammu izstrādes aizņem zema līmeņa programmēšanā, pavasara LDAP atbrīvo jūs no LDAP izmantošanas infrastruktūras detaļām. Nevis uztraukties NamingException
s un kļūst InitialContext
s, jūs varat brīvi koncentrēties uz lietojumprogrammas biznesa loģiku. Pavasara LDAP arī definē visaptverošu nepārbaudītu izņēmumu hierarhiju un nodrošina palīgu klases LDAP filtru un atšķirīgu nosaukumu veidošanai.
Pavasara LDAP un JNDI |
---|
Ņemiet vērā, ka pavasara LDAP ietvars neaizstāj JNDI. Drīzāk tas nodrošina iesaiņojuma un lietderības klases virs JNDI, lai vienkāršotu LDAP programmēšanu Java platformā. |
Šajā rakstā, kas ir iesācēju ceļvedis par pavasara LDAP izmantošanu, es sākšu, izstrādājot vienkāršu JNDI programmu LDAP meklēšanas izpildei. Tad es parādīšu, cik daudz vieglāk ir darīt to pašu, izmantojot pavasara LDAP sistēmu. Es jums parādīšu, kā izmantot pavasara LDAP AttributeMapper
s, lai kartētu LDAP atribūtus Java pupiņām, un kā izmantot tā dinamiskos filtrus vaicājumu veidošanai. Visbeidzot, es sniegšu soli pa solim ievadu par pavasara LDAP ietvara izmantošanu, lai pievienotu, dzēstu un modificētu datus jūsu LDAP serverī.
Ņemiet vērā, ka šajā rakstā tiek pieņemts, ka esat iepazinies ar pavasara ietvarstruktūras jēdzieniem un terminoloģiju. Skatiet sadaļu Resursi, lai uzzinātu vairāk par Spring Framework, LDAP un JNDI, kā arī lejupielādētu lietojumprogrammas paraugu.
Vienkāršs JNDI klients
1. Sarakstā parādīta vienkārša JNDI programma, kas izdrukās cn visu to atribūti Persona
ierakstiet objektus savā konsolē.
Saraksts 1. SimpleLDAPClient.java
publiskā klase SimpleLDAPClient {public static void main (String [] args) {Hashtable env = new Hashtable (); env.put (konteksts.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); env.put (Context.PROVIDER_URL, "ldap: // localhost: 10389 / ou = system"); env.put (Konteksts.SECURITY_AUTHENTICATION, "vienkāršs"); env.put (konteksts.SECURITY_PRINCIPAL, "uid = admin, ou = sistēma"); env.put (Konteksts.SECURITY_CREDENTIALS, "noslēpums"); DirContext ctx = null; NamingEnumeration results = null; mēģiniet {ctx = new InitialDirContext (env); SearchControls controls = new SearchControls (); controls.setSearchScope (SearchControls.SUBTREE_SCOPE); rezultāti = ctx.search ("", "(objektu klase = persona)", vadīklas); while (results.hasMore ()) {SearchResult searchResult = (SearchResult) results.next (); Atribūtu atribūti = searchResult.getAttributes (); Atribūts attr = attributes.get ("cn"); Virkne cn = (virkne) attr.get (); System.out.println ("Personas parastais vārds =" + cn); }} catch (NamingException e) {mest jaunu RuntimeException (e); } visbeidzot {if (results! = null) {mēģiniet {results.close (); } catch (izņēmums e) {}} if (ctx! = null) {mēģiniet {ctx.close (); } catch (izņēmums e) {}}}}}
Pirmais, ko esmu izdarījis 1. sarakstā, ir izveidot InitialDirContext
objektu, kuru pēc tam izmanto kā kontekstu šādām direktoriju darbībām. Veidojot jaunu Konteksts
objekts Es konfigurēju tādas īpašības kā lietotājvārds, parole un autentifikācijas mehānisms, kurus var izmantot, lai izveidotu savienojumu ar LDAP serveri. Man tas ir izdevies, izveidojot Hashtable
objektu, iestatot visas šīs īpašības kā atslēgu / vērtību pārus Hashtable
un iet garām Hashtable
uz InitialDirContext
konstruktors.
Šīs pieejas tūlītēja problēma ir tā, ka visus konfigurācijas parametrus esmu grūti kodējis .java failā. Tas darbojas lieliski manam piemēram, bet ne reālai lietojumprogrammai. Reālajā lietojumprogrammā es vēlētos saglabāt savienojuma rekvizītus failā jndi.properties un ievietot šo failu vai nu mana projekta classpath vai tā mapē / lib. Izveidojot jaunu InitialDirContext
objektu, JNDI API abās šajās vietās meklētu failu jndi.properties, pēc tam to izmantotu, lai izveidotu savienojumu ar LDAP serveri.
JNDI konfigurācijas parametri
2. saraksts parāda JNDI konfigurācijas parametrus, lai izveidotu savienojumu ar manu LDAP serveri. Zemāk es izskaidroju parametru nozīmi.
Saraksts 2. JNDI konfigurācijas parametri LDAP
java.naming.factory.initial = com.sun.jndi.ldap.LdapCtxFactory java.naming.provider.url = ldap: // localhost: 10389 / ou = system java.naming.security.authentication = vienkārša java.naming.security .principal = uid = admin, ou = sistēma java.naming.security.credentials = secret
- Konteksts.INITIAL_CONTEXT_FACTORY (
java.naming.factory.initial
) jābūt vienādam ar pilnībā kvalificētu klases nosaukumu, kas tiks izmantots jauna sākotnējā konteksta izveidošanai. Ja vērtība nav norādīta, tadNoInitialContextException
tiek izmests. - Konteksts.PROVIDER_URL (
java.naming.provider.url
) jābūt vienādam ar tā LDAP servera URL, ar kuru vēlaties izveidot savienojumu. Tam jābūt tādā formātāldap: //:
. - Konteksts.SECURITY_AUTHENTICATION (
java.naming.security.authentication
) apzīmē izmantojamā autentifikācijas mehānisma veidu. Es savā piemērā autentifikācijai esmu izmantojis lietotājvārdu un paroli, tāpēc šī rekvizīta vērtība ir vienkārši. - Konteksts.SECURITY_PRINCIPAL (
java.naming.security.principal
) apzīmē atšķirīgo lietotājvārdu (DN), kas jāizmanto, lai izveidotu savienojumu. - Konteksts.SECURITY_CREDENTIALS (
java.naming.security.credentials
) apzīmē lietotāja paroli.
JNDI klienta kods
Pēc tam, kad esat ieguvis Konteksts
objekts, mans nākamais solis ir izveidot SearchControl
objekts, kas apkopo faktorus, kas nosaka manas meklēšanas jomu un to, kas tiks atgriezts. Es gribu meklēt visu apakškoku, kas sakņojas kontekstā, tāpēc es iestatīju meklēšanas jomu SUBTREE_SCOPE
zvanot uz setSearchScope ()
metode SearchControl
, kā iepriekš parādīts 1. sarakstā.
Tālāk es zvanu Meklēt()
metode DirContext
, ieejot iekšā (objektu klase = persona)
kā filtra vērtību. The Meklēt()
metode atgriezīs a NamingEnumeration
objekts, kurā ir visi ieraksti apakšgrupā Konteksts
, kur objektu klase
ir vienāds ar persona
. Pēc tam, kad esat ieguvis a NamingEnumeration
kā savu rezultātu objektu es atkārtoju to un izdrukāju a cn atribūts katram Persona
objekts.
Tas pabeidz manu skaidrojumu par JNDI klienta kodu. Aplūkojot SimpleLDAPClient.java, kas parādīts 1. sarakstā, jūs varat viegli redzēt, ka vairāk nekā puse koda tiek virzīta uz resursu atvēršanu un aizvēršanu. Vēl viena JNDI API problēma ir tā, ka lielākā daļa tās metožu metīs NamingException
vai kāda no tās apakšklasēm kļūdas gadījumā. Tā kā NamingException
ir pārbaudīts izņēmums, jums tas jārīkojas, ja tas tiek izmests, bet vai tiešām varat atgūties no izņēmuma, ja jūsu LDAP serveris nedarbojas? Nē, jūs nevarat.
Lielākā daļa izstrādātāju apiet JNDI NamingException
s vienkārši tos noķerot un neko nedarot. Šī risinājuma nepatikšanas ir tādas, ka tā var zaudēt svarīgu informāciju.