我们在基于spring MVC的Web应用程序中使用spring security。
我们正在使用正常工作的spring security的LDAP模块进行身份验证。现在我需要从LDAP获取用户密码以保存在数据库中。
为此,我在我的代码中使用它。
public class PersonContextMapper implements UserDetailsContextMapper {
public UserDetails mapUserFromContext(DirContextOperations ctx, String username, Collection<GrantedAuthority> authorities) {
Person.Essence p = new Person.Essence(ctx);
p.setUsername(username);
p.setAuthorities(authorities);
Object passwordValue = ctx.getObjectAttribute("userPassword");
return p.createUserDetails();
}
public void mapUserToContext(UserDetails user, DirContextAdapter ctx) {
Assert.isInstanceOf(Person.class, user, "UserDetails must be a Person instance");
Person p = (Person) user;
p.populateContext(ctx);
}
}
但我没有获得密码的任何值。它总是空的。
请帮忙。
PS。我的身份验证成功。这意味着在登录表单中输入的密码与存储在LDAP中的密码正确匹配。
答案 0 :(得分:2)
可能是连接的身份验证状态没有读取userPassword
属性值的权限。大多数情况下,应用程序向目录服务器发出BIND请求,包括必要的适当控件。密码包含在BIND请求中,目录服务器在成功完成BIND请求后更改连接的身份验证状态。在任何情况下,userPassword
属性的值都经常被加密或散列,应用程序无需读取值。