Невозможно создать полномочия с префиксом Spring и без него в Spring - PullRequest
0 голосов
/ 30 декабря 2018

Я использую 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);
    }
}
...