Programmēšana

Vienkāršojiet piekļuvi direktorijai, izmantojot pavasara LDAP

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 NamingExceptions un kļūst InitialContexts, 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 AttributeMappers, 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
  1. 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, tad NoInitialContextException tiek izmests.
  2. 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: //:.
  3. 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.
  4. Konteksts.SECURITY_PRINCIPAL (java.naming.security.principal) apzīmē atšķirīgo lietotājvārdu (DN), kas jāizmanto, lai izveidotu savienojumu.
  5. 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 NamingExceptions 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.

$config[zx-auto] not found$config[zx-overlay] not found