Spring Project Part 7-自動登録(記憶-me)

16137 ワード

自動登録機能は쿠키(Cookie)で実現されることが多い.
Spring Securityでは、メモリでremember-me機能を処理したり、データベースで少量の設定を行ったりすることができます.security-context.xmlは、<security:remember-me>タグを使用して機能を実現する.<security:remember-me>は、複数の属性値を指定することができる.複数の属性で主に使用される属性はこうです.
  • key:Cookieで使用される値を暗号化するキー値
  • data-source-ref:DataSource、テーブルを使用して既存のログイン情報を記録
  • remember-me-cookie:ブラウザに保存されているCookieの名前を指定します.既定値はremember-meです.
  • remember-me-parameter:Webページにログインする場合、remember-meの多くはチェックボックスを使用して処理されます.このとき、チェックボックスラベルはname属性を表します.
  • token-validity-seconds:クッキーの有効時間を指定します.
  • データベースを使用した自動ログイン


    自動ログイン機能を処理する方法では、ログインした情報をデータベースで記録し、ユーザーが再アクセスしたときにセッションに情報がない場合はデータベースをクエリーするのが最も一般的です.サーバメモリにのみデータを格納するよりも、情報をデータベースに共有し、実行を安定させることが利点です.
    Spring Securityでは、remeber-me機能もJDBCを使用するように、指定された名前のテーブルを生成すると、指定されたSQL文が実行され、処理と直接実現の方法があります.生成されたテーブルは、ログインを維持するために必要な情報を保存するために使用されるだけで、カスタマイズされたテーブルではなく、指定されたフォーマットのテーブルを生成します.
    spring securityの公式ドキュメントのログイン情報を維持する表を以下に示します.
    create table persistent_logins
    (
        username varchar2(64) not null,
        series varchar2(64) primary key,
        token varchar2(64) not null,
        last_used timestamp not null
    );
    テーブルを生成するスクリプトは、特定のデータベースに基づいて、テーブル名とカラム名以外のカラムのタイプを適切に調整します.自動登録では、データベースの設定を使用して別途設定せず、data-source-ref万を指定します.
    security-context.xml
    <security:http>
      <!-- 678p 자동 로그인(remember-me) token-validity-seconds=일주일 -->
      <security:remember-me data-source-ref="dataSource" token-validity-seconds="604800"/>
    </security:http>

    ログイン画面の自動ログインの設定


    自動登録は登録画面選択処理により行われ、<input>ラベルのname属性値はremember-meとして指定される.
    customLogin.jsp
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>로그인 페이지</title>
    </head>
    <body>
        <h1>커스텀 로그인 페이지</h1>
        <h2><c:out value="${error}"/></h2>
        <h2><c:out value="${logout}"/></h2>
    
        <form action="/login" method="post">
            <div>
                <input type="text" name="username" value="">
            </div>
            <div>
                <input type="password" name="password" value="">
            </div>
            <!-- 추가 -->
            <div>
                <input type="checkbox" name="remember-me">자동로그인
            </div>
            <div>
                <input type="submit">
            </div>
            <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
        </form>
    </body>
    </html>
    プロジェクトを実行して자동로그인をチェックし、ブラウザでCookieを表示すると、remember-meというCookieが自動的に生成されます.

    データベースのpersistent_logins表には、ユーザーがログインしている情報がまだ存在するかどうかも表示されます.
    remember-me名で生成されたCookieは有効であり、ユーザーはブラウザを完全に終了した後、/sample/adminのようなログインが必要なページに再びアクセスして、正常なログインを確保することができる.
    ブラウザを終了して/sample/adminを呼び出すと、ブラウザから送信された情報を表示すると、remember-me Cookieの情報が送信されます.

    コンソールの説明
    再接続されたユーザー・シリーズが見つかり、存在する場合は自動的にログインします.次に、再取得したトークンとログイン時間を更新します.

    ログアウト時にCookieを削除


    自動ログイン機能を使用する場合、ユーザーがログアウトした場合、従来とは異なり、自動ログイン用のクッキーも削除する必要があります.Cookieを削除する項目をsecurity-context.xmlに指定します.
    security-context.xml
    <security:http>
    	<!-- 681p 로그아웃할 때 쿠키도 삭제 -->
    	<security:logout logout-url="/customLogout" invalidate-session="true" delete-cookies="remember-me, JSESSION_ID"/>
    </security:http>
    他の設定がなければ、自動ログインで使用されるクッキー名はremember-meであり、Tomcatで実行される場合、WASで発行されるクッキー名はJSESSION_IDであるべきである.Tomcatで発行されるクッキーは指定する必要はありませんが、関連するすべてのクッキーを同時に削除することが望ましいです.

    次の記事では、このアイテムの空気を使用してスプリングの安全性を設定する方法について説明します.