Page de connexion personnalisée

  • Compléter la configuration dev.config.WebSecurityConfig comme suit :
...
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    ...

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
        .authorizeRequests().anyRequest().authenticated()
        .and()
        .formLogin()
        .loginPage("/connexion");
    }

}
  • Créer un contrôleur pour la page de connexion :
package dev.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/connexion")
public class ConnexionController {

    // @GetMapping_ est un raccourci pour @RequestMapping(method = RequestMethod.GET)
    @GetMapping
    public String afficherPageCreer() {
        return "connexion";
    }

}
  • Créer une vue pour la page de connexion connexion.jsp :
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Paie - App</title>
        <link rel="stylesheet" href='<c:url value="/webjars/bootstrap/4.1.1/css/bootstrap.min.css"></c:url>'>
    </head>
    <body class="container">        

        <h1>Connexion</h1>

        <!-- Spring Security s'attend aux paramètres "username" et "password" -->
        <form method="post">
            <input name="username">
            <input name="password">
            <input type="submit" value="Se connecter">
        </form>

        <!-- en cas d'erreur un paramètre "error" est créé par Spring Security -->
        <c:if test="${param.error !=null}">
            Erreur d'authentification
        </c:if>
    </body>
</html>
  • Démarrer l'application et vérifier que c'est désormais une page d'authentification personnalisée.

A ce stade, Bootstrap n'est pas prise en compte. Comprenez-vous pourquoi ?

  • Compléter la configuration pour que Bootstrap puisse fonctionner sur cette page.

  • Connectez-vous.

A ce stade, l'authentification retourne une erreur :

Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN'.

Pour compléter le Token CSRF, nous allons utiliser un taglib Spring Security.

  • Ajouter la dépendance suivante :
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-taglibs</artifactId>
</dependency>
  • Compléter la page connexion.jsp comme suit :
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!-- intégration des tags Spring Security -->
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
<!DOCTYPE html>
<html>
    <head>...</head>
    <body class="container">        
        ...
        <form method="post">
            <input name="username">
            <input name="password">
            <input type="submit" value="Se connecter">

            <!-- génération du Token CSRF -->
            <sec:csrfInput/>
        </form>
        ...
    </body>
</html>
  • Vérifier que la page de connexion fonctionne. Inspectez la page générée pour visualiser le paramètre caché qui manquait.

results matching ""

    No results matching ""