[JAVA] Dans spring-security, l'URL de redirection de mon écran de connexion est incorrecte et la connexion échoue.

phénomène

Si vous vous connectez sous l'environnement Spring-Security, il échouera uniquement la première fois et vous serez authentifié normalement à partir de la deuxième fois.

Cause

La méthode de construction de l'URL de redirection vers l'écran d'auto-connexion était incorrecte.

Détails

Les contrôleurs suivants étaient prêts à afficher leur propre écran de connexion.

@Controller
@RequestMapping("/login")
public class LoginController {
    @GetMapping
    public String index(Optional<String> error) {
        ...
    }
}

Ensuite, j'ai préparé le contrôleur suivant pour rediriger vers / login``` quand je suis arrivé à / .

@Controller
public class TopController {
    @GetMapping("/")
    public String index() {
        return "redirect:" + MvcUriComponentsBuilder.fromMethodName(LoginController.class, "index", "").build().toUri().toString();
    }
}

Cependant, cette méthode de spécification est incorrecte et l'URL de redirection devient `` http: // localhost: 8080 / login? Erreur incorrecte ''. En termes simples, cette URL sert à afficher les erreurs de connexion.

Tout d'abord, lorsque vous redirigez vers cette URL, l'écran de connexion s'affiche. À propos, spring-security a une fonction appelée SavedRequest '' que s'il y a une URL qui a été accédée avant la connexion, elle sera sautée à cette URL après la connexion. La dernière URL dans ce cas est connexion? Erreur incorrecte '' pour l'erreur de connexion. Pour cette raison, si la connexion réussit, l'opération sera ignorée à l'URL de l'erreur de connexion.

Faire face

Modification de l'utilisation de MvcUriComponentsBuilder.

return "redirect:" + MvcUriComponentsBuilder.fromController(LoginController.class).build().toUri().toString();

Je n'ai pas vraiment compris la relation entre `` MvcUriComponentsBuilder '' et Optional </ code>, alors j'ai fait un compromis.

Recommended Posts

Dans spring-security, l'URL de redirection de mon écran de connexion est incorrecte et la connexion échoue.
Obtenez l'URL de la destination de la redirection HTTP en Java
Obtenez l'URL de la destination de la redirection HTTP dans Ruby
Lorsque l'écran de connexion expire avec Spring-Security, le jeton CSRF expire et la connexion échoue.
Correspondance de la partie où l'authentification # getDetails est effectuée dans le test unitaire de spring-security
Dans Time.strptime,% j (date totale de l'année) est
Source utilisée pour obtenir l'URL de la source de redirection en Java
Afficher la liste en setDétails à l'écran avec ressort-sécurité
Quelle est la représentation de la connaissance du domaine dans le modèle [DDD]?
[Android] Essayez celui qui affiche l'effet sur la partie touchée de l'écran qui est courant dans les jeux