2010-08-06 15 views
6

He integrado Apache Shiro con un usuario ficticio y funciona muy bien! Pero este marco no tiene tutoriales en línea? Es muy difícil entrar en él como un principiante.Apache Shiro combinado con LDAP

¿Alguien puede ayudarme a integrar una integración LDAP? Sólo he encontrado la información que no es tan difícil: -/

Empecé con la configuración de la esfera:

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

Pero qué hacer a continuación? ¿Cómo configurarlo?

Gracias por cualquier ayuda de

Respuesta

4

El AbstractLdapRealm es abstracto - no se puede instanciar directamente o declarar como su reino. Deberá subclasificar este e implementar los métodos abstractos necesarios.

No tendrá que hacer esto en la próxima versión de Shiro: actualmente hay un problema abierto (https://issues.apache.org/jira/browse/SHIRO-127) para tener una implementación concreta que se pueda usar de manera predeterminada, de modo que el 95% de los usuarios finales no lo hará tiene que subclasificar AbstractLdapRealm.

HTH,

Les

+0

¿hay una fecha de lanzamiento? – Sven

+1

Solo una actualización: la última distribución de Shiro 1.1 incluye un nuevo JndiLdapRealm: http://shiro.apache.org/static/current/apidocs/org/apache/shiro/realm/ldap/JndiLdapRealm.html El JavaDoc muestra cómo para definirlo en una configuración INI. –

4

Esto podría ser de poca ayuda. Compruebe todo el tutorial que cubre la autenticación simple y LDAP. http://www.ibm.com/developerworks/web/library/wa-apacheshiro/

+0

Gracias ya logré hacer eso. Y, de hecho, su enlace ayudó mucho. Si alguien necesita ayuda con la conexión de shiro a algún ldap pon un comentario aquí y vincula tu pregunta, te ayudaré chicos – Sven

+0

me alegra que lo hayas hecho :) –

3

Aquí está el ejemplo de trabajo.

active.ini

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

Código:

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

Esas clases parecen haberse descartado con 1.2.2. ¿Hay algún ejemplo de código con las clases actuales de Shiro? – user1069528

+0

@ user1069528 Parece que todavía están presentes en Shiro Core 1.2.3. ¿Has descargado el jar derecho del sitio web del proyecto? – JBert

0

si se utiliza la primavera como el marco básico, también puede utilizar el código XML contexto de aplicación para definir los reinos como:

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

Luego, entregue el dominio a su administrador de seguridad:

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

A continuación, invoque el código de acceso donde lo desee.

Cuestiones relacionadas