Я пытаюсь обновить роли, связанные с текущим зарегистрированным пользователем без выхода из системы, но он не работает, как я хочу.Как динамически изменять роли зарегистрированного пользователя в Spring Security 4?
Вот мой код:
PreAuthenticatedAuthenticationToken authtoken_orig = (PreAuthenticatedAuthenticationToken) SecurityContextHolder
.getContext().getAuthentication();
Collection<? extends GrantedAuthority> Authorities_orig = authtoken_orig.getAuthorities();
ArrayList<SimpleGrantedAuthority> Authorities_new = new ArrayList<SimpleGrantedAuthority>();
for (GrantedAuthority sga : Authorities_orig) {
SimpleGrantedAuthority tmpsga = (SimpleGrantedAuthority) sga;
if (tmpsga.getAuthority().compareTo("ROLE_UNKNOWN") != 0
&& tmpsga.getAuthority().compareTo("ROLE_SIGNER") != 0) {
Authorities_new.add(tmpsga);
}
}
SimpleGrantedAuthority role_signer_auth = new SimpleGrantedAuthority("ROLE_SIGNER");
Authorities_new.add(role_signer_auth);
PreAuthenticatedAuthenticationToken authtoken_new = new PreAuthenticatedAuthenticationToken(
authtoken_orig.getPrincipal(), authtoken_orig.getCredentials(), Authorities_new);
SecurityContextHolder.clearContext();
SecurityContextHolder.createEmptyContext().setAuthentication(authtoken_new);
Пожалуйста, не могли бы вы посоветовать?
Заранее спасибо
David L.
В моем случае, я работаю с аутентификацией сертификации клиент ... поэтому SecurityContextHolder содержит PreAuthenticatedAuthenticationToken вместо UserPasswordAuthenticationToken ... Является ли проблема связана с этим методом? Потому что, я пробовал ваш метод, прежде чем пытаться очистить контекст, как я делаю в этом примере –