Пример формы входа в Spring Security Custom

Пример формы входа в Spring Security Custom

По умолчанию, если форма входа не указана, Spring Security автоматически создаст форму входа по умолчанию. Пожалуйста, обратитесь к этому -Spring Security hello world example.

В этом руководстве мы покажем вам, как создать пользовательскую форму входа в Spring Security (пример XML).

Используемые технологии:

  1. Весна 3.2.8. ВЫПУСК

  2. Spring Security 3.2.3.RELEASE

  3. Затмение 4.2

  4. JDK 1.6

  5. Maven 3

Note
В этом примере будут повторно использоваться предыдущиеSpring Security hello world example, улучшите его для поддержки настраиваемой формы входа.

1. Проект Демо

2. Структура каталогов

Просмотрите окончательную структуру каталогов этого руководства.

spring-security-custom-login-xml-directory

3. Конфигурация Spring Security

Определил вашу пользовательскую форму входа в Spring XML-файл. Смотрите объяснение ниже:

  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-параметр = ”username” - имя запроса, который содержит «username». В HTML это имя входного текста.

  5. – Enable the Cross Site Request Forgery (CSRF) protection, refer to this link. В XML по умолчанию защита CSRF отключена.

Обычно мы не участвуем в аутентификации, такой как обработка входа в систему или выхода из системы, пусть Spring это обрабатывает, мы просто обрабатываем успешную или неудачную страницу для отображения.

spring-security.xml



    
        
        
        
        
        
    

    
        
          
            
          
        
    

В поздравлении выше/admin и его подпапки защищены паролем.

Cross Site Request Forgery (CSRF) Protection
Если CSRF включен, вы должны включить_csrf.token на страницу, на которую вы хотите войти или выйти. См. Нижеlogin.jsp иadmin.jsp (форма выхода). В противном случае функция входа и выхода из системы не будет выполнена.

Password in clear-text?
Очень плохая идея, вы всегда должны хешировать пароль с помощью алгоритма SHA, это руководство покажет вам, как это сделать - Пример хеширования пароля Spring Security.

4. Пользовательская форма входа

Пользовательская форма входа в систему, чтобы соответствовать выше (шаг 3) Поздравление Spring Security. Это должно быть само за себя.

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:

А две другие страницы JSP, кстати,admin.jsp, защищены паролем 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. Spring MVC Controller

Простой контроллер.

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

6.1. Страница приветствия -http://localhost:8080/spring-security-loginform-xml/

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. Если имя пользователя и пароль неверны, будут отображаться сообщения об ошибках, и Spring будет перенаправлять на этот URL/login?error.

spring-security-custom-login-xml-error

6.4. Если имя пользователя и пароль введены правильно, Spring перенаправит на исходный запрошенный URL-адрес и отобразит страницу.

spring-security-custom-login-xml-admin

6.5. Попробуйте выйти из системы, он перенаправит на страницу/login?logout.

spring-security-custom-login-xml-logout

Скачать исходный код

Скачать -spring-security-custom-login-form-xml.zip (15 КБ)