如何从ldap获取用户信息?

时间:2017-12-07 14:29:08

标签: java ldap shiro

我正在使用apache shiro进行ldap验证:

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

拨打currentUser.getPrincipal(),我只收到了登录用户的电子邮件地址 如何获取更多用户信息,例如lastname,firstname等?

2 个答案:

答案 0 :(得分:1)

getPrincipal()仅返回主题的标识符。请尝试使用getPrincipals()

  

对象getPrincipal()
  返回此Subject在应用程序范围内的唯一标识   principal,如果此Subject是匿名的,则返回null。

     

PrincipalCollection getPrincipals()
  返回此Subject的主体   (标识属性)以PrincipalCollection的形式或null   如果此主题是匿名的

Apache Shiro API (JavaDoc)

答案 1 :(得分:0)

您可以扩展LDAP领域。并向Principal / PrincipalCollection添加更多上下文(或返回自定义对象或您的Principal)

这是一个old thread,但我发现自己每隔一段时间就把它挖出来并涵盖这个主题(它提到了JSecurity,这是Shiro的原始项目名称)。