1. 程式人生 > >ssm + redis 實現sso單點登入

ssm + redis 實現sso單點登入

1.原理講解

由於CAS 過於重量級且時間成本較高 ,所以我決定公司採用自己的sso 單點系統來處理系統之間只要一個系統登入成功,其他子系統就不用登入。

舉例說明:  比如公司有 系統 A 系統 B 此時我們就要定義一個專門用來做登入認證的sso系統。 如果使用者登入的是A系統,那麼A系統登入的時候就要去SSO做登入校驗!校驗完成後SSO系統就會返回給A系統對應登入是否成功的標識(成功的話將token存入到SSO系統中的redis快取中去 key根據使用者名稱時間戳密碼自己定義的sign來生成) 並且會給使用者返回唯一的登入成功憑證token。A系統收到token後 將token存入A系統的 此時如果訪問B系統網址 B系統先到cookie中獲取對應的資訊。如果存在就去SSO的認證介面認證token是否正確 SSO系統根據token憑證(SSO系統去redis校驗是否有值 有值就更新redis的快取時間和傳統session 一樣的原理)來判斷返回給B系統對應是否成功的表示。如果有就直接跳轉。沒有就去登入頁面。

其實這個地方有兩種情況的(1.所有系統都是 一級域名下的子域名包括一級域名 這樣就不存在cookie跨域,2.如果想要不同的域名間跳轉那麼只能將cookie存入到SSO系統並且所有的登入都在SSO系統頁面! 所有子系統都要跳轉到SSO系統。成功或者失敗再重定向到子系統中。這樣就不會存在跨域問題了)

2.程式碼講解

2.1 SSO 登入介面

直接上程式碼截圖


可以根據自己的規則生產token

2.2  SSO 登入認證介面


根據token去redis快取查詢是否有登入資訊

3 A系統登入認證

將登入的cookie存入到 .test.com域名(你可以修改成自己的域名)

B系統登入也是類似

4. A ,B系統其他資源訪問攔截器處理(去校驗token是否有效)


你可以在此處新增自己的使用者資訊快取到本系統的redis伺服器的邏輯程式碼(注意快取使用者時間要比SSO系統時間短 否則SSO使用者資訊過期)

B系統與之類似

至此核心邏輯寫完!

Demo下載地址:https://download.csdn.net/download/zzxwx/10337801

同樣是單點登入的例子:https://blog.csdn.net/tanga842428/article/details/79756992

注意事項:考慮同一賬號多個客戶端登入情況,需要比對使用