Como alterar o nome de login para o usuário atual com o Spring Security 3.1?

Eu tenho o requisito de que cada usuário pode alterar seu próprio nome de usuário enquanto ele estiver logado. O problema é como atualizar o nome de usuário (Principal) no token de autenticação do Spring Security?

(Eu tenho que atualizá-lo, porque eu uso o nome prinicpal do token de autenticação para identificar o usuário em alguns casos de uso de negócios.)

Eu uso o login baseado em formulários e cookies com base em mim para que meus tokens de autenticação sejamUsernamePaswordAuthenticationToken eRememberMeAuthenticationToken. Ambos têm um campoprincipal onde o nome de login é armazenado. Infelizmente esta variável éfinal, então eu não posso mudar seu valor.

Alguém tem uma ideia de como Spring Security recomenda mudar oPrincipal no token de autenticação?

Meu trabalho atual é que eu substituí oUsernamePaswordAuthenticationToken eRememberMeAuthenticationToken com subclasses que têm um campo principal adicional não final e substituem ogetPrincipal() método para retornar este principal adicional em vez do original. Então, também subclassei as duas classes que geram esses tokens para criar meus tokens em vez do original. --- Mas eu sinto que isso é um grande truque.

questionAnswers(3)

yourAnswerToTheQuestion