Spring Security 4.2.4.Java 8
Мне нужно изменить права пользователей без повторной регистрации.Это мой сервис:
@Component
public class AuthoritiesUpdater {
private final UserRoleService userRoleService;
@Autowired
public AuthoritiesUpdater(UserRoleService userRoleService) {
this.userRoleService = userRoleService;
}
public void update(User user) {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
List<UserRole> userRoles = userRoleService.findByUser(user);
List<GrantedAuthority> actualAuthorities = userRoles.stream().map(userRole -> new
SimpleGrantedAuthority(userRole.getRole())).collect(Collectors.toList());
Authentication newAuth = new
UsernamePasswordAuthenticationToken(auth.getPrincipal(), auth.getCredentials(), actualAuthorities);
SecurityContextHolder.getContext().setAuthentication(newAuth);
}
}
Но есть проблема.Мне нужно изменить роли для любого пользователя.Допустим, я менеджер и хочу поменять роль для тестового пользователя.Мне нужно перезагрузить разрешения после сохранения конфигурации, и у тестового пользователя появятся новые роли, когда он нажмет кнопку F5 и перезагрузит страницу без повторного входа.Но SecurityContextHolder.getContext().getAuthentication();
возвращает объект аутентификации только для текущего пользователя (менеджера).Мне нужно получить объект аутентификации для измененного пользователя для вызова new
UsernamePasswordAuthenticationToken(auth.getPrincipal(), auth.getCredentials(), actualAuthorities);
.Могу ли я получить объект аутентификации для любого пользователя или я могу решить эту проблему другим способом?Может быть, я могу получить объект аутентификации, использующий реестр сеансов?
PS: выполнение сеанса с истекшим сроком действия для пользователя не является хорошим вариантом.