單點登入-解析
單點登入(SSO)是大型網站必要的實現,例如電商網站,一個系統後面往往有N多個子系統,當用戶操作時,驗證一個系統後如果還需要去驗證其他字系統,那將會很麻煩,所以對此,就要使用到單點登入來產生和儲存一個信任來使使用者不需要頻繁認證,還有一個問題就是其他子系統如何去驗證信任。
這就是單點登入的目的,所以我們需要做的主要有兩方面
~產生儲存信任
~驗證信任
主要有兩種實現方式
一:Redis+Jackson+Cookie+Filter原生實現單點登入
在cookie中寫入資訊,寫入信任。
1:構建Redis連線池來提供Redis例項
2:封裝Redis API以支援對Redis的操作
3:因為Redis中儲存的是json字串格式,所以需要編寫一個json格式轉換工具
4:Cookie讀寫的封裝,登入成功時將token寫入cookie和Redis,再次登入時檢測Cookie中的token是否還存在。
5:退出時刪除cookie。
6:配置session重新登入時的有效時間。
這種實現方式對程式碼的侵入性較高,在多處需要改動。
二:Spring Session+Redis實現SSO
它的原理和原生程式碼實現類似,通過對HttpServletRequest和HttpServletResponse的包裝來實現cookie的讀寫,序列化採用JDK原生的方式。
1:在使用者登入登出等controller方法裡面使用原生的session進行儲存或者刪除使用者的登入資訊。
2:在web.xml中配置filter,此處使用官方的org.springframework.web.filter.DelegatingFilterProx這個filter來重置session的有效時間。
3:配置springsession.xml,以xml方式配置RedisheCookie。