Как обновить имя пользователя SecurityContextHolder для обновления для текущего пользователя - PullRequest
0 голосов
/ 22 марта 2019

В моем приложении при изменении текущего пользовательского имени пользователя, вошедшего в систему, я хочу обновить принцип UserDetails для текущего пользователя.Как я могу это сделать?Я получаю текущее имя пользователя следующим способом:

 public UserDetails getSystemUser(){
    try {
        UserDetails principal  = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
        return  principal;
    }catch (ClassCastException e){
        return null;
    }
}

1 Ответ

0 голосов
/ 22 марта 2019

Насколько мне известно, для этого нет метода setusername.

Имейте в виду, что это решение не проверено, оно может работать или не работать.

Итак, сначала clearcontext.Затем создайте новый пустой контекст и установите для вновь созданного объекта аутентификации обновленное имя пользователя и всю необходимую ДРУГУЮ ИНФОРМАЦИЮ.

  • @ 'newusername', вам следует установить новую обновленную строку имени пользователя или свой объект customuserdetails с помощьюновое обновленное имя пользователя и другая информация.
Authentication oldAuthenticationObject = SecurityContextHolder.getContext().getAuthentication();

SecurityContextHolder.clearContext();
SecurityContext context = SecurityContextHolder.createEmptyContext();
UsernamePasswordAuthenticationToken authentication =
                new UsernamePasswordAuthenticationToken(
                NEWUSERNAME,
                null,
                oldAuthenticationObject.getAuthorities());
context.setAuthentication(authentication);
SecurityContextHolder.setContext(context);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...