2010-08-06 17 views
6

Ich integrierte Apache Shiro mit einem Dummy-Benutzer und es funktioniert gut! Aber dieses Framework hat keine Tutorials online ?! Es ist sehr schwer, als Anfänger in die Sache einzusteigen.Apache Shiro kombiniert mit LDAP

Kann jemand mir helfen, eine ldap Integration zu integrieren. Ich habe festgestellt, nur die Informationen, dass es nicht so schwierig ist: -/

Ich begann mit der Konfiguration der Realm:

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

Aber was als nächstes zu tun? Wie konfiguriere ich es?

Dankten für jede Hilfe

Antwort

4

Die AbstractLdapRealm ist abstrakt - Sie können es nicht direkt instanziiert werden können oder es als Ihr Reich erklären. Sie müssen diese Unterklasse erstellen und die erforderlichen abstrakten Methoden implementieren.

Sie müssen dies nicht bei der nächsten Shiro-Version tun - es gibt derzeit ein Problem (https://issues.apache.org/jira/browse/SHIRO-127), um eine konkrete Implementierung zu haben, die out of the box verwendet werden kann, so dass 95% der Endbenutzer nicht müssen die AbstractLdapRealm ableiten.

HTH,

Les

+0

Gibt es ein Veröffentlichungsdatum? – Sven

+1

Nur ein Update - die neueste Shiro 1.1-Distribution enthält eine neue JndiLdapRealm: http://shiro.apache.org/static/current/apidocs/org/apache/shiro/realm/ldap/JndiLdapRealm.html Die JavaDoc zeigt, wie um es in einer INI-Konfiguration zu definieren. –

4

Diese wenig hilfreich sein könnte. Überprüfen Sie das gesamte Tutorial, das die einfache und LDAP-Authentifizierung umfasst. http://www.ibm.com/developerworks/web/library/wa-apacheshiro/

+0

Danke, das habe ich schon geschafft. Und tatsächlich hat deine Verbindung sehr geholfen. Wenn jemand Hilfe bei der Verbindung von Shiro zu irgendeinem ldap benötigt, setze hier einen Kommentar und verlinke deine Frage, ich werde dir helfen, Leute – Sven

+0

ich bin froh, dass du es getan hast :) –

3

Hier ist ein funktionierendes Beispiel.

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

Diese Klassen scheinen mit 1.2.2 fallengelassen zu werden. Gibt es ein Codebeispiel mit den aktuellen Shiro-Klassen? – user1069528

+0

@ user1069528 Scheint, dass sie noch in Shiro Core 1.2.3 vorhanden sind. Haben Sie das richtige Glas von der Projekt-Website heruntergeladen? – JBert

0

wenn Frühling mit als Kern Rahmen, können Sie auch den Anwendungskontext XML verwenden, um die Bereiche zu definieren:

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

Dann übergeben Sie den Realm an Ihren Sicherheitsmanager:

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

Dann rufen Sie den Login-Code, wo immer Sie wollen.

Verwandte Themen