我要求每个用户在他登录时都可以更改自己的用户名.问题是如何更新
Spring Security的身份验证令牌中的用户名(Principal)?
(我必须更新它,因为我使用身份验证令牌中的原始名称来识别某些业务用例中的用户.)
我使用基于表单和cookie rememeber我的登录,所以我的身份验证令牌是UsernamePaswordAuthenticationToken和RememberMeAuthenticationToken.两者都有存储登录名的字段主体.不幸的是,这个变量是最终的,所以我不能改变它的价值.
有人有一个想法,Spring Security如何建议更改认证令牌中的校长?
我目前的工作环境是,我替换了UsernamePaswordAuthenticationToken和RememberMeAuthenticationToken与具有另外未最终主要字段的子类,并覆盖getPrincipal()方法来返回这个附加主体而不是原始的.然后我还将生成这个令牌的两个类子类化,以创建我的令牌,而不是原来的令牌. —但是我觉得这是一个大黑客.
解决方法
为什么要使用令牌,即认证子类? Authentication.getPrincipal()不会在您的情况下返回UserDetails的实例吗?
如果您提供自己的UserDetails实现(一个具有setUsername()方法),而如果我正确理解您的大小写,则可以自由进行验证.