1.原理講解redis
因爲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跨域cookie
2.若是想要不一樣的域名間跳轉那麼只能將cookie存入到SSO系統而且全部的登陸都在SSO系統頁面! 全部子系統都要跳轉到SSO系統。成功或者失敗再重定向到子系統中。這樣就不會存在跨域問題了session
2.代碼講解blog
2.1 SSO 登陸接口token
直接上代碼截圖接口
能夠根據本身的規則生產token資源
2.2 SSO 登陸認證接口
根據token去redis緩存查詢是否有登陸信息
3 A系統登陸認證
將登陸的cookie存入到 .test.com域名(你能夠修改爲本身的域名)
B系統登陸也是相似
4. A ,B系統其餘資源訪問攔截器處理(去校驗token是否有效)
你能夠在此處添加本身的用戶信息緩存到本系統的redis服務器的邏輯代碼(注意緩存用戶時間要比SSO系統時間短 不然SSO用戶信息過時)
B系統與之相似
至此核心邏輯寫完!