Apache Shiro与LDAP结合使用

时间:2010-08-06 08:13:11

标签: security ldap

我将Apache Shiro与虚拟用户集成,它运行得很好!但是这个框架没有在线教程?!作为一个初学者,很难进入它。

有人可以帮我集成ldap集成。我只发现信息并不困难: - /

我开始配置领域:

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

但接下来该怎么办?如何配置?

感谢您的帮助

4 个答案:

答案 0 :(得分:4)

AbstractLdapRealm是抽象的 - 您无法直接实例化它或将其声明为您的领域。您必须将此子类化为子类并实现必要的抽象方法。

您不需要在下一个Shiro版本上执行此操作 - 目前有一个问题是打开(https://issues.apache.org/jira/browse/SHIRO-127)以具有可以开箱即用的具体实现,因此95%的最终用户将不必继承AbstractLdapRealm。

HTH,

莱斯

答案 1 :(得分:4)

这可能没什么帮助。检查整个教程,它包括简单和LDAP身份验证。 http://www.ibm.com/developerworks/web/library/wa-apacheshiro/

答案 2 :(得分:3)

这是工作示例。

active.ini

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

代码:

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();

答案 3 :(得分:0)

如果使用Spring作为核心框架,您还可以使用应用程序上下文XML将领域定义为:

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

然后将域移交给您的安全管理器:

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

然后,在任何地方调用登录代码。