我有一个 Spring Boot 应用程序,它使用 LDAP 来对用户进行身份验证。对于用户,我正在映射 AD 中的属性并填充用户的名字、姓氏、部门、电子邮件、电话以及图像等值。但是,我无法从属性中获取员工编号。
当我使用该工具检查属性时活动目录浏览器 https://learn.microsoft.com/en-us/sysinternals/downloads/adexplorer,我可以看到每个条目 88 个属性。但是,当我使用此代码打印上下文中的每个属性时,
@Bean
public UserDetailsContextMapper userDetailsContextMapper() {
return new LdapUserDetailsMapper() {
@Override
public UserDetails mapUserFromContext(DirContextOperations ctx, String username, Collection<? extends GrantedAuthority> authorities) {
String email = ctx.getStringAttribute("mail");
String department = ctx.getStringAttribute("department");
String empNumber = ctx.getStringAttribute("employeeNumber");
System.out.println(empNumber); // this prints null
System.out.println(ctx.attributeExists("employeeNumber")); // this prints false
byte[] value= (byte[])ctx.getObjectAttribute("thumbNailPhoto");
BASE64Encoder base64Encoder = new BASE64Encoder();
StringBuilder imageString = new StringBuilder();
imageString.append("data:image/jpg;base64,");
imageString.append(base64Encoder.encode(value));
String image = imageString.toString();
Attributes attributes = ctx.getAttributes();
NamingEnumeration<? extends Attribute> namingEnumeration = attributes.getAll();
try {
while(namingEnumeration.hasMore()){
/*this loop prints 75 attributes but employeeNumber attribute is missing along with some other attributes*/
Attribute attribute = namingEnumeration.next();
System.out.println(attribute);
}
} catch (NamingException e) {
e.printStackTrace();
}
CustomUserDetails userDetails = (CustomUserDetails)userService.loadUserByUsername(username);
userDetails.setImage(image);
userDetails.setEmail(email);
userDetails.setDepartment(department);
return userDetails;
}
};
}
仅打印 75 个属性。为什么有些属性没有被检索到?我如何访问这些属性?
我认为你需要扩展像memberof这样的数组元素。
试试这个..它可能会有所帮助。
Attribute attribute = namingEnumeration.next();
System.out.println(attribute);
System.out.println(attribute.size());
如果大小大于一..再次扩展它
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)