Depois que um novo usuário envia um formulário 'Nova conta', quero fazer o login manualmente desse usuário para que ele não precise fazer login na página seguinte.
A página de login do formulário normal passando pelo interceptor de segurança Spring funciona bem.
No controlador de formulário de nova conta, estou criando um UsernamePasswordAuthenticationToken e configurando-o no SecurityContext manualmente:
SecurityContextHolder.getContext().setAuthentication(authentication);
Na mesma página, verifico posteriormente se o usuário está conectado com:
SecurityContextHolder.getContext().getAuthentication().getAuthorities();
Isso retorna as autoridades que defini anteriormente na autenticação. Tudo está bem.
Mas quando esse mesmo código é chamado na página seguinte que carrego, o token de autenticação é apenas UserAnonymous.
Não estou claro por que ele não manteve a autenticação que defini na solicitação anterior. Alguma ideia?
- Pode ter a ver com o ID de sessão não estar configurado corretamente?
- Existe algo que possivelmente está substituindo minha autenticação de alguma forma?
- Talvez eu precise de mais uma etapa para salvar a autenticação?
- Ou há algo que preciso fazer para declarar a autenticação em toda a sessão, em vez de uma única solicitação de alguma forma?
Só estou procurando alguns pensamentos que possam me ajudar a ver o que está acontecendo aqui.
SecurityContextHolder.getContext().setAuthentication(authentication)
. Funciona e é comum, mas existem sérias deficiências de funcionalidade que você encontrará se simplesmente fizer isso. Para obter mais informações, veja minha pergunta e a resposta: stackoverflow.com/questions/47233187/…