2010-08-06 13 views
6

Ho integrato Apache Shiro con un utente fittizio e funziona perfettamente! Ma questa struttura non ha tutorial online ?! È molto difficile entrarci come principiante.Apache Shiro combinato con LDAP

Qualcuno può aiutarmi ad integrare un'integrazione LDAP. Ho trovato solo le informazioni che non è poi così difficile: -/

Ho iniziato con la configurazione del regno:

[main] 
    myRealm = org.apache.shiro.realm.ldap.AbstractLdapRealm 

Ma cosa fare dopo? Come configurarlo?

Grazie per tutto l'aiuto di

risposta

4

L'AbstractLdapRealm è astratta - Non è possibile creare un'istanza direttamente o dichiarare come vostro regno. Dovrai creare una sottoclasse di questa e implementare i metodi astratti necessari.

Non sarà necessario eseguire questa operazione alla prossima versione di Shiro - attualmente è stato aperto un problema (https://issues.apache.org/jira/browse/SHIRO-127) per avere un'implementazione concreta che può essere utilizzata out of the box in modo che il 95% degli utenti finali non devi sottoclassi di AbstractLdapRealm.

HTH,

Les

+0

c'è una data di rilascio? – Sven

+1

Solo un aggiornamento: l'ultima versione di Shiro 1.1 include un nuovo JndiLdapRealm: http://shiro.apache.org/static/current/apidocs/org/apache/shiro/realm/ldap/JndiLdapRealm.html JavaDoc mostra come per definirlo in una configurazione INI. –

4

Questo potrebbe essere di poco aiuto. Controlla l'intero tutorial che copre l'autenticazione semplice e LDAP. http://www.ibm.com/developerworks/web/library/wa-apacheshiro/

+0

Grazie, sono già riuscito a farlo. E infatti il ​​tuo link ha aiutato molto. Se qualcuno ha bisogno di aiuto per collegare shiro ad alcuni ldap metti un commento qui e collega la tua domanda, ti aiuterò ragazzi – Sven

+0

sono contento che tu abbia fatto :) –

3

Ecco un esempio funzionante.

active.ini

ldapRealm = org.apache.shiro.realm.activedirectory.ActiveDirectoryRealm 
ldapRealm.url = ldap://ldapserver:389 

Codice:

Factory<SecurityManager> ldapFactory = new IniSecurityManagerFactory("classpath:active.ini"); 
SecurityManager sManager = ldapFactory.getInstance(); 
SecurityUtils.setSecurityManager(sManager); 

Subject currentUser = SecurityUtils.getSubject(); 

     if (!currentUser.isAuthenticated()) { 
      UsernamePasswordToken token = new UsernamePasswordToken("user", "password"); 
      try { 
       currentUser.login(token); 
      } catch (UnknownAccountException ex) { 
       logger.info("Unknown user"); 
      } catch (IncorrectCredentialsException ex) { 
       logger.info("Incorrect credentials"); 
      } catch (LockedAccountException ex) { 
       logger.info("Account is Locked"); 
      } catch (AuthenticationException ex) { 
       logger.info("Authentication Exception"); 
      } 
     } 

     logger.info("User [" + currentUser.getPrincipal() +"] logged succesfully"); 
     currentUser.logout(); 
+0

Queste classi sembrano essere eliminate con 1.2.2. Esiste un esempio di codice con le attuali classi Shiro? – user1069528

+0

@ user1069528 Sembra che siano ancora presenti in Shiro Core 1.2.3. Hai scaricato il vaso giusto dal sito web del progetto? – JBert

0

se si utilizza Primavera come il quadro di base, è anche possibile utilizzare il codice XML contesto di applicazione per definire i regni come:

<bean id="ldapRealm" class="org.apache.shiro.realm.activedirectory.ActiveDirectoryRealm"> 
      <property name="url" value="ldap:/ldapserver:389" /> 
    </bean> 

Quindi consegnare il dominio al responsabile della sicurezza:

<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> 
    <property name="realm" ref="ldapRealm" /> 
</bean> 

Quindi, richiamare il codice di accesso dove desiderato.

Problemi correlati