Spring Security 提供了Remember-me機制用來實現記錄用戶的登陸狀態。方便用戶下 html
次自動登陸。Spring Security 對此操做提供了必要的鉤子,remember-me有兩個固定的實現 java
一個是使用把用戶登陸信息加密以cookie的方式保存到客戶端。一是用戶能夠把用戶信息 web
持久化到服務端的數據庫中。 spring
注意:這兩種實現都必須有一個 UserDetailsService實現。若是你使用一個沒有使用 sql
UserDetailsService的驗證提供者,Remember-me將不會工做,除非你在應用的上下文中 數據庫
有一個UserDetailsService對象。 安全
1、基本的Hash保存到客戶端的Cookie中。 服務器
直接在命名空間<http>中加入<remember-me />元素,就能夠使用本方法。但要注意的 cookie
是在你的。此時系統會自動爲你生成UserDetailsService對象(若是你在配置文件中定義了此 app
對象必須在<remember-me />使用user-service-ref指定)。本策略使用的爲
此策略會在客戶端生成一個名稱爲SPRING_SECURITY_REMEMBER_ME_COOKIE,值進
行加密後的Cookie。
2、持久化到服務器端的服務器中
若是想使用本策略,你須要在命名空間的配置中提供一個datasource引用:
數據庫中還必須包含一個名爲persistent_logins的表,表結構使用一下SQL語句建立(或者是等價的):
因爲以上兩種策略對應的實現類都的父類(org.springframework.security.web.authentication.rememberme.AbstractRememberMeServices)實現了LogoutHandler接口。
在AbstractRememberMeServices類中的 logout(...)方法中清楚了Cookie。以下所示:
若是想在用戶安全退出後不刪除Cookie, 能夠本身實現類,實現類能夠繼承org.springframework.security.web.authentication.rememberme.PersistentTokenBasedRememberMeServices 或
org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices。在自定義類中只重寫org.springframework.security.web.authentication.rememberme.AbstractRememberMeServices
類中的logout(...)方法便可。(可是這樣 就失去了安全退出的意義了。哈哈)