コンテンツへスキップ

開発者ドキュメント

Springセキュリティのカスタムログインフォームの例

  • 投稿日: 2019-11-05 2019-11-05
  • タグ: login, Spring Security

デフォルトでは、ログインフォームが指定されていない場合、Spring Securityはデフォルトのログインフォームを自動的に作成します。このリンクを参照してください://spring-security/spring-security-hello-world-example/[Spring Security hello worldの例]

このチュートリアルでは、Spring Security用のカスタム・ログイン・フォーム(XMLの例)を作成する方法を説明します。

使用される技術:

  1. Spring 3.2.8.RELEASE

  2. 春のセキュリティ3.2.3.RELEASE

  3. Eclipse 4.2

  4. JDK 1.6

  5. Maven 3

1.プロジェクトデモ

2.ディレクトリ構造

このチュートリアルの最終的なディレクトリ構造を確認してください。


spring-security-custom-login-xml-directory、width = 544、height = 449

3.春のセキュリティ設定

Spring XMLファイルでカスタムログインフォームを定義しました。以下の説明を参照してください。

  1. login-page = “/login” – カスタムログインフォームを表示するページ

  2. authentication-failure-url = “/login?error” – 認証に失敗した場合、

`/login?error`ページに転送します
。 logout-success-url = “/login?logout” – ログアウトに成功した場合は、

ビュー

/logout

。 username-parameter = “username” – 含まれているリクエストの名前

ユーザー名”。 HTMLでは、これは入力テキストの名前です。

  1. <csrf/> – CSRF(Cross Site Request Forgery)保護を有効にし、

このhttp://spring.io/blog/2013/08/21/spring-security-3-2-0-rc1-highlights-csrf-protection/[link]を参照してください。

XMLでは、デフォルトでCSRF保護が無効になっています。

通常、ログインやログアウト処理のような認証には関与せず、Springが処理するようにします。成功または失敗したページを表示するだけです。

spring-security.xml

<beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/security
    http://www.springframework.org/schema/security/spring-security-3.2.xsd">

    <http auto-config="true">
        <intercept-url pattern="/admin** ** " access="ROLE__USER"/>
        <form-login
            login-page="/login"
            default-target-url="/welcome"
            authentication-failure-url="/login?error"
            username-parameter="username"
            password-parameter="password"/>
        <logout logout-success-url="/login?logout"/>
        <!-- enable csrf protection -->
        <csrf/>
    </http>

    <authentication-manager>
        <authentication-provider>
          <user-service>
            <user name="mkyong" password="123456" authorities="ROLE__USER"/>
          </user-service>
        </authentication-provider>
    </authentication-manager>

</beans:beans>

上記のお祝いでは、 `/admin`とそのサブフォルダはすべてパスワードで保護されています。

  • クロスサイトリクエスト偽造(CSRF)保護** CSRFが有効な場合は、ログインまたはログアウトしたいページに

    __csrf.token`を含める必要があります。 `login.jsp`と

    admin.jsp`(ログアウトフォーム)の下を参照してください。そうしないと、ログインとログアウトの両方の機能が失敗します。

  • クリアテキストのパスワード?** かなり悪い考えでは、SHAアルゴリズムでパスワードをハッシュする必要があります。このチュートリアルでは、Spring Securityのパスワードハッシュの例を示します。

4.カスタムログインフォーム

上記の(ステップ3)に合致するカスタムログインフォームがSpring Securityのお祝いになります。それは自明でなければなりません。

login.jsp

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
<title>Login Page</title>
<style>
.error {
    padding: 15px;
    margin-bottom: 20px;
    border: 1px solid transparent;
    border-radius: 4px;
    color: #a94442;
    background-color: #f2dede;
    border-color: #ebccd1;
}

.msg {
    padding: 15px;
    margin-bottom: 20px;
    border: 1px solid transparent;
    border-radius: 4px;
    color: #31708f;
    background-color: #d9edf7;
    border-color: #bce8f1;
}

#login-box {
    width: 300px;
    padding: 20px;
    margin: 100px auto;
    background: #fff;
    -webkit-border-radius: 2px;
    -moz-border-radius: 2px;
    border: 1px solid #000;
}
</style>
</head>
<body onload='document.loginForm.username.focus();'>

    <h1>Spring Security Custom Login Form (XML)</h1>

    <div id="login-box">

        <h2>Login with Username and Password</h2>

        <c:if test="${not empty error}">
            <div class="error">${error}</div>
        </c:if>
        <c:if test="${not empty msg}">
            <div class="msg">${msg}</div>
        </c:if>

        <form name='loginForm'
          action="<c:url value='j__spring__security__check'/>" method='POST'>

          <table>
            <tr>
                <td>User:</td>
                <td><input type='text' name='username' value=''></td>
            </tr>
            <tr>
                <td>Password:</td>
                <td><input type='password' name='password'/></td>
            </tr>
            <tr>
                <td colspan='2'><input name="submit" type="submit"
                    value="submit"/></td>
            </tr>
          </table>

          <input type="hidden" name="${__csrf.parameterName}"
            value="${__csrf.token}"/>

        </form>
    </div>

</body>
</html>

そして、他の2つのJSPページ、btw `admin.jsp`はSpring Securityによってパスワードで保護されています。

hello.jsp

<%@page session="false"%>
<html>
<body>
    <h1>Title : ${title}</h1>
    <h1>Message : ${message}</h1>
</body>
</html>

admin.jsp + logout

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@page session="true"%>
<html>
<body>
    <h1>Title : ${title}</h1>
    <h1>Message : ${message}</h1>

    <c:url value="/j__spring__security__logout" var="logoutUrl"/>

    <!-- csrt for log out-->
    <form action="${logoutUrl}" method="post" id="logoutForm">
      <input type="hidden"
        name="${__csrf.parameterName}"
        value="${__csrf.token}"/>
    </form>

    <script>
        function formSubmit() {
            document.getElementById("logoutForm").submit();
        }
    </script>

    <c:if test="${pageContext.request.userPrincipal.name != null}">
        <h2>
            Welcome : ${pageContext.request.userPrincipal.name} | <a
                href="javascript:formSubmit()"> Logout</a>
        </h2>
    </c:if>

</body>
</html>

5. Spring MVCコントローラ

シンプルなコントローラ。

HelloController.java

package com.mkyong.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.デモ

6.1。ようこそページ –

http://localhost:8080/spring-security-loginform-xml/


spring-security-custom-login-xml-welcome、width = 595、height = 480

6.2

/admin`ページにアクセスしようとすると、Spring Securityはリクエストを傍受して

/login`にリダイレクトし、カスタムログインフォームが表示されます。


spring-security-custom-login-xml-login、width = 595、height = 480

6.3。ユーザー名とパスワードが間違っていると、エラーメッセージが表示され、SpringはこのURLに `/login?error`をリダイレクトします。


spring-security-custom-login-xml-error、width = 595、height = 480

6.4。ユーザー名とパスワードが正しい場合、Springは元の要求されたURLにリダイレクトし、ページを表示します。


spring-security-custom-login-xml-admin、width = 595、height = 480

6.5。ログアウトすると、 `/login?logout`ページにリダイレクトされます。


spring-security-custom-login-xml-logout、width = 595、height = 480

ソースコードをダウンロードする

ダウンロードする – リンク://wp-content/uploads/2011/08/spring-security-custom-login-form-xml-1.zip[spring-security-custom-login-form-xml.zip](15 KB )

参考文献

  1. リンク://spring-security/spring-security-hello-world-example/[Spring

セキュリティHello World XMLの例]。

http://docs.spring.io/spring-security/site/docs/3.2.0.RELEASE/guides/form.html

[Creating

カスタムログインフォーム]。

http://spring.io/blog/2013/08/21/spring-security-3-2-0-rc1-highlights-csrf-protection/

[Spring

セキュリティ3.2.0.RC1ハイライト:CSRF保護]


login


spring security

投稿ナビゲーション

前 前の投稿: Eclipse IDE:エディターでサポートされていないコンテンツタイプ
次 次の投稿: Struts 2でグローバル・リソース・バンドルを構成する方法

getdocs

13036RSS




タグ

Algorithms apache Applications CentOS Core Java Databases debian Development DevOps Docker Hibernate Java Java Collections javascript Let's Encrypt Linux Basics Maven Miscellaneous MongoDB Monitoring mysql Networking nginx Node.js NoSQL Persistence php Programming python React REST Security Spring Spring Boot Spring MVC Spring Security System Tools Testing ubuntu Ubuntu 16.04 Ubuntu 16.04 Ubuntu 18.04 Ubuntu 18.04 Vue.js Weekly Review

最近の投稿

  • arpingコマンド
  • ターミナルからプロセスを完全に切り離す
  • iPerfを使用してネットワークパフォーマンスを測定する方法
  • コマンドラインからLinuxディストリビューションを探す
  • パブリックDMZネットワークアーキテクチャ

60日間無料の$100ドルのクレジットを取得

60日間無料の$100ドルのクレジットを取得

© 2025  開発者ドキュメント. Proudly powered by WordPress. WordStar, Theme by Linesh Jose

モバイルバージョンに移動