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