在我的应用程序中,当当前登录用户的usernam更改时,我想为当前用户更新UserDetails主体。我怎样才能做到这一点?我通过以下方法获取当前用户名:
public UserDetails getSystemUser(){
try {
UserDetails principal = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
return principal;
}catch (ClassCastException e){
return null;
}
}
答案 0 :(得分:0)
据我所知,没有setusername方法。
请记住,此解决方案未经测试,可能会行不通。
那么首先清除上下文。然后创建一个新的空上下文,并使用更新的用户名和所需的所有其他信息设置新创建的身份验证对象。
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);