Я использую Spring Boot и внедряю аутентификацию на основе LDAP.Я использую пользовательский UserDetailsContextMapper
, который расширяет LdapUserDetailsMapper
, и пользовательский PermissionEvaluator
.
. В моем mapUserFromContext
методе UserDetailsContextMapper
я предоставляю новые полномочия и хочу добавить некоторые полномочия ROLE инекоторые полномочия привилегий.Таким образом, я хочу, чтобы некоторые авторитеты были ROLE_BLABLA
, а некоторые BLABLA
.Я проверяю, правильно ли создаются объекты полномочий, но по пути к обычаю PermissionEvaluator
все полномочия приобретают вид ROLE_BLABLA
.Я отладил, чтобы проверить, и, кажется, SimpleAuthorityMapper.mapAuthority
запускается, который проверяет все полномочия и добавляет ROLE_
, если его нет, что полностью побеждает то, что я пытаюсь сделать.Как мне обойти это?
Вот мой UserDetailsContextMapper
@Component
public class UserDetailsContextMapper extends LdapUserDetailsMapper {
@Override
public UserDetails mapUserFromContext(DirContextOperations ctx, String username, Collection<? extends GrantedAuthority> authorities) {
// Get authorityList from current context from DB
// Map the roles
for (MyRole role : authorityList) {
List<GrantedAuthority> newAuthorities = new ArrayList<>();
newAuthorities.add(createRoleAuthority(role.getRoleName()));
List<Privilege> privileges = new ArrayList<>(role.getPrivileges());
for (Privilege privilege : privileges) {
newAuthorities.add(createPrivilegeAuthority(privilege.getPrivilegeName()));
}
for (GrantedAuthority authority : newAuthorities) {
essence.addAuthority(authority);
}
}
// DO other stuff
return essence.createUserDetails();
}
protected GrantedAuthority createRoleAuthority(String role) {
return createAuthority(role);
}
protected GrantedAuthority createPrivilegeAuthority(String privilege) {
privilege = privilege.toUpperCase();
return new SimpleGrantedAuthority(privilege);
}
}