Une fois qu'un nouvel utilisateur a soumis un formulaire «Nouveau compte», je souhaite connecter manuellement cet utilisateur afin qu'il n'ait pas à se connecter sur la page suivante.
La page de connexion sous forme normale passant par l'intercepteur de sécurité Spring fonctionne très bien.
Dans le contrôleur de formulaire de nouveau compte, je crée un UsernamePasswordAuthenticationToken et le configure manuellement dans SecurityContext:
SecurityContextHolder.getContext().setAuthentication(authentication);
Sur cette même page, je vérifie plus tard que l'utilisateur est connecté avec:
SecurityContextHolder.getContext().getAuthentication().getAuthorities();
Cela renvoie les autorités que j'ai définies plus tôt dans l'authentification. Tout est bien.
Mais lorsque ce même code est appelé sur la page suivante que je charge, le jeton d'authentification est simplement UserAnonymous.
Je ne sais pas pourquoi il n'a pas conservé l'authentification que j'ai définie sur la demande précédente. Des pensées?
- Cela pourrait-il être dû au fait que l'ID de session n'est pas configuré correctement?
- Y a-t-il quelque chose qui écrase peut-être mon authentification?
- Peut-être ai-je juste besoin d'une autre étape pour enregistrer l'authentification?
- Ou dois-je faire quelque chose pour déclarer l'authentification sur toute la session plutôt qu'une seule demande?
Je cherche juste quelques pensées qui pourraient m'aider à voir ce qui se passe ici.
SecurityContextHolder.getContext().setAuthentication(authentication)
. Cela fonctionne et est courant, mais vous rencontrerez de graves lacunes de fonctionnalité si vous le faites simplement. Pour plus d'informations, voir ma question et la réponse: stackoverflow.com/questions/47233187/…