Exemple de formulaire de connexion personnalisée Spring Security

Exemple de formulaire de connexion personnalisé Spring Security

Par défaut, si aucun formulaire de connexion n'est spécifié, Spring Security crée automatiquement un formulaire de connexion par défaut. Veuillez vous référer à ceci -Spring Security hello world example.

Dans ce didacticiel, nous vous montrerons comment créer un formulaire de connexion personnalisé pour Spring Security (exemple XML).

Technologies utilisées:

  1. Spring 3.2.8.RELEASE

  2. Spring Security 3.2.3.RELEASE

  3. Eclipse 4.2

  4. JDK 1.6

  5. Maven 3

Note
Dans cet exemple, lesSpring Security hello world example précédents seront réutilisés, améliorez-le pour prendre en charge un formulaire de connexion personnalisé.

1. Démo du projet

2. Structure du répertoire

Consultez la structure finale des répertoires de ce didacticiel.

spring-security-custom-login-xml-directory

3. Configuration de sécurité de printemps

Défini votre formulaire de connexion personnalisé dans un fichier XML Spring. Voir l'explication ci-dessous:

  1. login-page=”/login” – The page to display the custom login form

  2. authentication-failure-url=”/login?error” – If authentication failed, forward to page /login?error

  3. logout-success-url=”/login?logout” – If logout successful, forward to view /logout

  4. username-parameter = ”username” - Le nom de la requête qui contient le “username”. En HTML, il s'agit du nom du texte d'entrée.

  5. – Enable the Cross Site Request Forgery (CSRF) protection, refer to this link. En XML, par défaut, la protection CSRF est désactivée.

Normalement, nous n'impliquons pas dans l'authentification comme le traitement de connexion ou de déconnexion, laissez Spring le gérer, nous gérons simplement la page réussie ou échouée à afficher.

spring-security.xml



    
        
        
        
        
        
    

    
        
          
            
          
        
    

Dans les félicitations ci-dessus, les/admin et ses sous-dossiers sont tous protégés par mot de passe.

Cross Site Request Forgery (CSRF) Protection
Si CSRF est activé, vous devez inclure un_csrf.token dans la page à laquelle vous souhaitez vous connecter ou vous déconnecter. Reportez-vous auxlogin.jsp etadmin.jsp ci-dessous (formulaire de déconnexion). Sinon, la fonction de connexion et de déconnexion échouera.

Password in clear-text?
Une très mauvaise idée, vous devriez toujours hacher le mot de passe avec l'algorithme SHA, ce tutoriel vous montre comment - Exemple de hachage de mot de passe Spring Security.

4. Formulaire de connexion personnalisé

Un formulaire de connexion personnalisé pour correspondre ci-dessus (étape 3) Félicitations de Spring Security. Il devrait être explicite.

login.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>


Login Page




    

Spring Security Custom Login Form (XML)

Login with Username and Password

${error}
${msg}
User:
Password:

Et les deux autres pages JSP, btwadmin.jsp, sont protégées par mot de passe par Spring Security.

hello.jsp

<%@page session="false"%>


    

Title : ${title}

Message : ${message}

admin.jsp + logout

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@page session="true"%>


    

Title : ${title}

Message : ${message}

Welcome : ${pageContext.request.userPrincipal.name} | Logout

5. Contrôleur Spring MVC

Un contrôleur simple.

HelloController.java

package com.example.web.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class HelloController {

    @RequestMapping(value = { "/", "/welcome**" }, method = RequestMethod.GET)
    public ModelAndView welcomePage() {

        ModelAndView model = new ModelAndView();
        model.addObject("title", "Spring Security Custom Login Form");
        model.addObject("message", "This is welcome page!");
        model.setViewName("hello");
        return model;

    }

    @RequestMapping(value = "/admin**", method = RequestMethod.GET)
    public ModelAndView adminPage() {

        ModelAndView model = new ModelAndView();
        model.addObject("title", "Spring Security Custom Login Form");
        model.addObject("message", "This is protected page!");
        model.setViewName("admin");

        return model;

    }

    //Spring Security see this :
    @RequestMapping(value = "/login", method = RequestMethod.GET)
    public ModelAndView login(
        @RequestParam(value = "error", required = false) String error,
        @RequestParam(value = "logout", required = false) String logout) {

        ModelAndView model = new ModelAndView();
        if (error != null) {
            model.addObject("error", "Invalid username and password!");
        }

        if (logout != null) {
            model.addObject("msg", "You've been logged out successfully.");
        }
        model.setViewName("login");

        return model;

    }

}

6. Demo

spring-security-custom-login-xml-welcome

6.2 Try to access /admin page, Spring Security will intercept the request and redirect to /login, and your custom login form is displayed.

spring-security-custom-login-xml-login

6.3. Si le nom d'utilisateur et le mot de passe sont incorrects, des messages d'erreur seront affichés et Spring redirigera vers cette URL/login?error.

spring-security-custom-login-xml-error

6.4. Si le nom d'utilisateur et le mot de passe sont corrects, Spring redirigera vers l'URL d'origine demandée et affichera la page.

spring-security-custom-login-xml-admin

6.5. Essayez de vous déconnecter, il sera redirigé vers la page/login?logout.

spring-security-custom-login-xml-logout

Télécharger le code source

Téléchargez-le -spring-security-custom-login-form-xml.zip (15 Ko)