中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

springsecurity如何實現下次自動登錄功能過程解析

發布時間:2021-09-27 15:13:25 來源:億速云 閱讀:160 作者:小新 欄目:編程語言

這篇文章將為大家詳細講解有關springsecurity如何實現下次自動登錄功能過程解析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

一、原理分析

第一次登陸時,如果用戶勾選了readme選項,登陸成功后springsecurity會生成一個cookie返回給瀏覽器端,瀏覽器下次訪問時如果攜帶了這個cookie,springsecurity就會放行這次訪問。

二、實現方式

2.1 簡單實現方式

(1) 在springsecurity的配置文件中,http節點下增加一個remember-me配置

<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"指定前臺傳遞的是否rememberme的參數名,前臺要傳遞的參數值是true或false

(2)前臺登錄頁面上增加一個checkbox

<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>

checkbox的name屬性要和上邊配置文件中的remember-me-parameter="remembermeParamater"保持一致。

(3)測試

啟動工程,進行登錄,登錄成功后觀察cookie,會發現服務器端返回了一個名為remember-me的cookie

現在關閉瀏覽器,再次打開并訪問,只要不清除cookie就可以直接訪問資源,不需要重新登錄。

這種方式有個弊端,瀏覽器端要攜帶的這個cookie值服務端是存放在內存中的,并沒有進行持久化,所以如果服務重啟后服務器端存儲的這個值就會丟失,瀏覽器端的rememberme就會失效。為了解決這個問題就需要將服務器端生成的這個cookie值持久化到數據庫中。

2.2 數據庫實現方式

(1)創建一張表用來持久化rememberme的記錄

-- 創建記錄rememberme記錄的表

CREATE TABLE persistent_logins( username VARCHAR(64), series VARCHAR(64), token  VARCHAR(64), last_used DATE  );

(2)將spring-security 配置文件中的rememberme標簽的內容改為如下內容

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

data-source-ref="dataSource"用來指定數據源,spring-security通過數據源來操作數據庫中的persistent_logins表

token-validity-seconds表示rememberme的有效時間,以秒為單位,這里的86400=24*3600表示一天

(3)測試

啟動工程,進行登錄,登錄成功后會在persistent_logins表中生成一條記錄,

關閉瀏覽器再次訪問時會根據瀏覽器中攜帶的cookie值來查找數據庫中的這條記錄,如果查詢到了就認證通過

三、區分是密碼登錄還是rememberme登錄

在用戶進行一些敏感操作時,需要區分是否是rememberme登錄,如果是需要讓用戶跳轉到登錄頁面。

在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,后臺接口返回false,再關閉瀏覽器再次訪問這個地址,后臺接口返回true,表示這次是使用rememberme進行的認證。

關于“springsecurity如何實現下次自動登錄功能過程解析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

凤庆县| 静安区| 伊春市| 乌海市| 大邑县| 平武县| 永平县| 三亚市| 荔浦县| 都昌县| 博野县| 西宁市| 芜湖市| 门源| 内江市| 吉安市| 山阴县| 钦州市| 鸡西市| 聂荣县| 徐州市| 威信县| 石家庄市| 宜君县| 大新县| 西乌珠穆沁旗| 易门县| 仙游县| 平塘县| 囊谦县| 丹江口市| 遵义县| 长岭县| 东海县| 卢湾区| 拜泉县| 明星| 稻城县| 晋城| 重庆市| 宝应县|