我正在使用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等?
答案 0 :(得分:1)
getPrincipal()
仅返回主题的标识符。请尝试使用getPrincipals()
。
对象getPrincipal()
返回此Subject在应用程序范围内的唯一标识 principal,如果此Subject是匿名的,则返回null。PrincipalCollection getPrincipals()
返回此Subject的主体 (标识属性)以PrincipalCollection的形式或null 如果此主题是匿名的
答案 1 :(得分:0)
您可以扩展LDAP领域。并向Principal / PrincipalCollection添加更多上下文(或返回自定义对象或您的Principal)
这是一个old thread,但我发现自己每隔一段时间就把它挖出来并涵盖这个主题(它提到了JSecurity,这是Shiro的原始项目名称)。