Dopo che un nuovo utente ha inviato un modulo "Nuovo account", desidero accedere manualmente a tale utente in modo che non debba accedere alla pagina successiva.
La normale pagina di login del modulo che passa attraverso l'intercettatore di sicurezza di primavera funziona perfettamente.
Nel controller del nuovo modulo di account sto creando un UsernamePasswordAuthenticationToken e impostandolo manualmente nel SecurityContext:
SecurityContextHolder.getContext().setAuthentication(authentication);
In quella stessa pagina controllo successivamente che l'utente abbia effettuato l'accesso con:
SecurityContextHolder.getContext().getAuthentication().getAuthorities();
Ciò restituisce le autorità che ho impostato in precedenza nell'autenticazione. Tutto bene.
Ma quando questo stesso codice viene chiamato nella pagina successiva che carico, il token di autenticazione è solo UserAnonymous.
Non mi è chiaro il motivo per cui non ha mantenuto l'autenticazione che avevo impostato nella richiesta precedente. qualche idea?
- Potrebbe essere dovuto al fatto che l'ID di sessione non è stato impostato correttamente?
- C'è qualcosa che potrebbe sovrascrivere in qualche modo la mia autenticazione?
- Forse ho solo bisogno di un altro passaggio per salvare l'autenticazione?
- O c'è qualcosa che devo fare per dichiarare l'autenticazione per l'intera sessione piuttosto che una singola richiesta in qualche modo?
Sto solo cercando alcuni pensieri che potrebbero aiutarmi a vedere cosa sta succedendo qui.
SecurityContextHolder.getContext().setAuthentication(authentication)
. Funziona ed è comune, ma ci sono gravi carenze di funzionalità che incontrerai se lo fai. Per maggiori informazioni, vedi la mia domanda e la risposta: stackoverflow.com/questions/47233187/…