自動ログオンを達成するために私に来春のセキュリティを覚えておいてください

自動ログオンを達成するために私に来春のセキュリティを覚えておいてください

前:BCryptPasswordEncoder春のセキュリティ暗号化とパスワード認証の原則

まず、原則として分析

あなたはこのクッキーを運ぶ場合は、最初の着陸は、成功した着陸springsecurityがブラウザにクッキーバックが生成された後、あなたは、ブラウザの次の訪問をREADMEオプションをチェックすると、springsecurityはこの訪問をリリースされます。

第二に、実装

2.1単純な実装

springsecurity設定ファイルで(1)、覚えて、私の構成ノードのhttpを追加

<security:http auto-config="true" use-expressions="false">
        <!-- 配置链接地址,表示任意路径都需要ROLE_USER权限,这里可以配置
         一个逗号隔开的角色列表-->
        <security:intercept-url pattern="/**" access="ROLE_USER"/>

        <!--自定义登录页面-->
        <security:form-login login-page="/login.html" login-processing-url="/login"
                             username-parameter="username" password-parameter="password"
                             authentication-failure-forward-url="/failed.html"
                             default-target-url="/index.html"

        />
        <!--关闭csrf,默认是开启的-->
        <security:csrf disabled="true"/>

        <security:remember-me remember-me-parameter="remembermeParamater" />
        <!-- 退出 -->
        <security:logout invalidate-session="true" logout-url="/logout.do" logout-success-url="/login.html"/>
    </security:http>

どのremember-me-parameter="remembermeParamater"転送フロントデスクリメンバー・ミーパラメータ名、パラメータ値が渡される前景色が真か偽であるかどうかを指定します

(2)は、ログインページの前面にあるチェックボックスを追加します

<form action="/login" method="post">
        用户名:<input type="text" name="username" placeholder="请输入用户名"><br>
        密 码:<input type="password" name="password" placeholder="请输入密码"><br>
        记住我:<input id="_spring_security_remember_me" type="checkbox" name="remembermeParamater" value="true">
        <input type="submit" value="登录">
    </form>

name属性のチェックボックスと上のプロファイルにremember-me-parameter="remembermeParamater"一致しています。

(3)テスト

スタートプロジェクト、ログインが成功した観測クッキーで、ログインするには、サーバーが返すクッキーが覚えて、私と呼ばれるでしょう

近くブラウザ、そして再び開くためのアクセス、彼らはクッキーが直接リソースにアクセスすることができますクリアしていない今、あなたは再度ログインする必要はありません。

このように、サーバ側のストレージを再起動するサービスの値は、ブラウザ側のリメンバー・ミー失われそうだとすれば、メモリに格納され、ブラウザのクッキー値がサーバーによって運ばれる医療過誤、無持続的な存在であります彼らは失敗します。この問題を解決するには、クッキー値がデータベースに永続化サーバによって生成される必要があります。

2.2データベースの実装

(1)リメンバー・ミーの持続性を記録するテーブルを作成します

-- 创建记录rememberme记录的表
CREATE TABLE persistent_logins
(
  username  VARCHAR(64),
  series   VARCHAR(64),
  token     VARCHAR(64),
  last_used DATE 
 );

(2)以下の構成ファイル内のコンテンツリメンバー・ミースプリングセキュリティタグ

<security:remember-me remember-me-parameter="remembermeParamater" data-source-ref="dataSource"
                              token-validity-seconds="86400"/>

data-source-ref="dataSource"データベースおよびデータ・ソースpersistent_logins介して操作テーブルにバネセキュリティ、データソースを指定するために使用され

トークンの有効性-秒= 24 * 3600 86400は、1日を表し、秒単位で、効果的なタイムリメンバー・ミーを示し、

(3)テスト

、プロジェクトを開始してログインし、ログインがpersistent_loginsテーブルのレコードを生成します成功し、


による認証へのクエリ場合は、ブラウザがアクセスを再び閉じられたときに、ブラウザでクッキーの帳簿価額に基づいて、データベースにこのレコードを見つけることになります

第三に、区別がパスワードログインまたはリメンバー・ミーです

ユーザーが実行すると、いくつかの重要な操作は、ログインページにジャンプするようにユーザーを聞かせする必要がある場合には、リメンバー・ミーログインであるかどうかを区別する必要があります。

congtroller層に決定するための方法を提供

@GetMapping("/isRemembermeUser")
public boolean isRemembermeUser(){
    Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
    if(authentication==null){
        return false;
    }
    //判断当前用户是否是通过rememberme登录,是返回true,否返回false
    return RememberMeAuthenticationToken.class.isAssignableFrom(authentication.getClass());
}

パスワードを使用しての最初のログ、訪問のhttp://localhost/user/isRemembermeUser.do、舞台裏のインターフェイスは、インターフェイス返します、そして近い、これは認証リメンバー・ミーを用いて行われる示すために、真の背景をもう一度アドレスにアクセスするためのブラウザを偽を返します。

アドレステストプロジェクトコード:エンジニアリング例

おすすめ

転載: www.cnblogs.com/chengxuxiaoyuan/p/11961102.html