2010-08-06 3 views
6

J'ai intégré Apache Shiro avec un utilisateur fictif et ça marche très bien! Mais ce cadre n'a pas de tutoriels en ligne ?! C'est très difficile d'y entrer en tant que débutant. Quelqu'un peut-il m'aider à intégrer une intégration LDAP? Je n'ai trouvé des informations qu'il est pas si difficile: -/Apache Shiro combiné avec LDAP

J'ai commencé avec la configuration du domaine:

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

Mais quoi faire? Comment le configurer?

Merci pour toute aide de

Répondre

4

Le AbstractLdapRealm est abstraite - vous ne pouvez pas instancier directement ou déclarer que votre royaume. Vous devrez sous-classer celui-ci et implémenter les méthodes abstraites nécessaires.

Vous n'aurez pas besoin de faire cela lors de la prochaine version de Shiro - il y a actuellement un problème ouvert (https://issues.apache.org/jira/browse/SHIRO-127) pour avoir une implémentation concrète qui peut être utilisée hors de la boîte afin que 95% des utilisateurs finaux ne avoir à sous-classer AbstractLdapRealm.

HTH,

Les

+0

Y a-t-il une date de sortie? – Sven

+1

Juste une mise à jour - la dernière distribution de Shiro 1.1 inclut un nouveau JndiLdapRealm: http://shiro.apache.org/static/current/apidocs/org/apache/shiro/realm/ldap/JndiLdapRealm.html Le JavaDoc montre comment pour le définir dans une config INI. –

4

Cela pourrait être de peu d'aide. Vérifiez pour l'ensemble du tutoriel, il couvre l'authentification simple et LDAP. http://www.ibm.com/developerworks/web/library/wa-apacheshiro/

+0

Merci, j'ai déjà réussi à le faire. Et en fait, votre lien a beaucoup aidé. Si quelqu'un a besoin d'aide pour connecter shiro à un ldap mettre un commentaire ici et lier votre question, je vais vous aider les gars – Sven

+0

je suis content que vous avez fait :) –

3

Voici un exemple de travail.

active.ini

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

code:

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

Ces classes semblent être abandonnées avec 1.2.2. Existe-t-il un exemple de code avec les classes Shiro actuelles? – user1069528

+0

@ user1069528 Apparemment, ils sont toujours présents dans Shiro Core 1.2.3. Avez-vous téléchargé le bon pot sur le site du projet? – JBert

0

si vous utilisez Spring comme cadre de base, vous pouvez également utiliser le XML de contexte d'application pour définir les domaines comme:

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

Puis remettez le domaine à votre responsable de la sécurité:

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

Ensuite, appelez le code de connexion où vous voulez.

Questions connexes