SpringSecurity之自動登入

2021-10-01 03:18:33 字數 2095 閱讀 1105

在spring security中加入自動登入功能:

使用這種方案的前提是已經實現了乙個userdetailsservice(前面章節有實現),重啟服務後訪問login頁面會多出乙個remember me的多選框,勾選後登入檢視瀏覽器的cookie會多出乙個:

name

value

remember-me

123rjfsdfjoijiojwernjigfjwe

這是spring security預設自動登入的cookie欄位,原始碼如下;

public

abstract

class

abstractremembermeservices

implements

remembermeservices

, initializingbean, logouthandler

spring security會在每次表單登入成功後更新cookie的remember-me的value(令牌token)值,這個令牌值預設包含了乙個隨機生成的key(uuid),這就會導致每次重啟,key都會重新生成,也就會導致所有自動登入的cookie失效,除此之外,在多例項的情況下,每個例項的key也不相同,如果在同一次會話訪問了不同的例項(集群),會導致令牌失效。

所以我們要指定key:

持久化令牌方案的登入邏輯都是一樣的,就是在勾選remember-me後並登入成功後把token傳送到瀏覽器。

在這種持久化令牌方案裡,核心是series和token,它們都是用md5雜湊過得隨機字串。

好處:

1.解決了乙個token可以在多端同時登入的問題(每個session都會對應乙個新的token)

2.自動登入不會導致series改變,而每次登入都會驗證series和token,當存在乙個合法使用者和乙個非法使用者(有同乙個token)

實現:

在實現上,spring security使用persistentremembermetoken表示乙個驗證實體:

public

class

persistentremembermetoken

/* setter and getter*/

對應的,我們需要再db中建立乙個persistent_logins表,並建立如下結構:

username varchar(64

)not

null

series varchar(64

)primary

key token varchar(64

)not

null

last_used tomestamp not

null

建立完錶後,我們需要定製tokenrepository,其頂層介面:

public

inte***ce

persistenttokenrepository

我們可以自己實現這個介面,也可以使用spring security提供的jdbc實現:jdbctokenrepositoryimpl

spring security之會話管理

會話固定攻擊 session fixation attack 是利用應用系統在伺服器的會話id固定不變機制,借助他人用相同的會話id獲取認證和授權,然後利用該會話id劫持他人的會話以成功冒充他人,造成會話固定攻擊。整個攻擊流程是 防禦固定攻擊非常簡單只需要在使用者登入之後重新生成新的session就...

Spring Security系列之記住我 十二

有這樣乙個場景 有個使用者初訪並登入了你的 然而第二天他又來了,卻必須再次登入。於是就有了 記住我 這樣的功能來方便使用者使用,然而有一件不言自明的事情,那就是這種認證狀態的 曠日持久 早已超出了使用者原本所需要的使用範圍。這意味著,他們可以關閉瀏覽器,然後再關閉電腦,下週或者下個月,乃至更久以後再...

二 Spring Security之密碼加密

override protected void configure authenticationmanagerbuilder auth throws exception 密碼加密,必須為 bean 否則報錯 作用 例項化密碼加密規則,該規則首先會校驗資料庫中儲存的密碼是否符合其規則 經過 bcryp...