如何为当前用户的更新更新SecurityContextHolder用户名

时间:2019-03-22 11:00:06

标签: java spring-security

在我的应用程序中,当当前登录用户的usernam更改时,我想为当前用户更新UserDetails主体。我怎样才能做到这一点?我通过以下方法获取当前用户名:

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

1 个答案:

答案 0 :(得分:0)

据我所知,没有setusername方法。

请记住,此解决方案未经测试,可能会行不通。

那么首先清除上下文。然后创建一个新的空上下文,并使用更新的用户名和所需的所有其他信息设置新创建的身份验证对象。

  • @'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);