あなたはUserDetailsContextMapper
を見てください。 InetOrgPersonContextMapper
またはPersonContextMapper
のようなLDAPオブジェクトのいくつかの属性を自動的にマッピングするクラスを実装しています。特別な属性がある場合は、独自の属性を登録する必要があります。私たちは手作業でマップしなければならなかったmanager
とdirectReports
の属性を使ってADに格納された行を報告しています。
public class CustomUserDetailsContextMapper extends LdapUserDetailsMapper implements UserDetailsContextMapper {
@Autowired
private LdapUserService ldapUserService;
@Override
public UserDetails mapUserFromContext(DirContextOperations ops, String username,
Collection<? extends GrantedAuthority> authorities) {
UserDetails details = super.mapUserFromContext(ops, username, authorities);
String manager = ops.getStringAttribute("manager");
String[] directReports = ops.getStringAttributes("directReports");
User user = new User(
username,
"",
details.isEnabled(),
details.isAccountNonExpired(),
details.isCredentialsNonExpired(),
details.isAccountNonLocked(),
details.getAuthorities(),
manager,
directReports);
return user;
}
@Override
public void mapUserToContext(UserDetails user, DirContextAdapter dir) {
super.mapUserToContext(user, dir);
}
}
そして、明らかにあなたはまた、同様にあなたのUserDetails
を微調整する必要があります。このことができます
public class User extends org.springframework.security.core.userdetails.User {
private String manager;
private String[] directReports;
public User(String username, String password, boolean enabled, boolean accountNonExpired,
boolean credentialsNonExpired, boolean accountNonLocked,
Collection<? extends GrantedAuthority> authorities) {
super(username, password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities);
}
public User(String username, String password, boolean enabled, boolean accountNonExpired,
boolean credentialsNonExpired, boolean accountNonLocked,
Collection<? extends GrantedAuthority> authorities, String manager, String[] directReports) {
this(username, password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities);
this.manager = manager;
this.directReports = directReports;
}
public String getManager() {
return manager;
}
public String[] getDirectReports() {
return directReports;
}
}
希望。