企業級系統,内部服務數較多,單點登入簡稱(SSO)是系統不斷增多必須要面臨的一個問題.
SSO的定義是在多個應用系統中,使用者隻需要登入一次就可以通路所有互相信任的應用系統。
今天在弄單點登入,用的是CAS。權限控制使用的是shiro,shiro有個shiro-cas子子產品可以與CAS進行內建。
CAS原理

image.png
- CAS服務端:主要用于對CAS用戶端進行認證和授權,實作方式為發放和驗證ticket來實作。
- CAS用戶端:一般是可以通過支援的協定(例如,CAS,SAML,OAuth)與服務端進行通信的用戶端,可以是某些軟體包,也可以是具體的應用。在企業系統中一般為一個個的服務。
具體可參考官網
具體錯誤
說一下今天遇到的具體問題,感覺自己腦袋反應不靈活啊,我用的Spring Boot內建Shiro與CAS,在配置Shiro相關的Bean的時候。
因為要自定義一些過濾器,ShiroFilter中可以設定自己的Filter,當設定自己的Filter的時候,預設的Filter會被覆寫掉。
我自定義的Filter都配置成了Spring的Bean,并且把Shiro的LogoutFilter也配置成了Bean。
Spring Boot預設加載所有的Filter Bean并且在請求的時候都會生效,這樣就導緻每次請求LogoutFilter都會生效,然後每次的登入資訊都被清除,清除登入資訊之後,其它的認證相關Filter也繼續起作用,并且執行登入方法,登入失敗重定向到登入頁面,登入頁面也會調用LogoutFilter,總之就是一直重定向了。
知識點
今天的錯誤就是對Spring的知識點了解不夠透徹導緻的,Spring中配置的所有Filter Bean預設都會生效。
最後
一個小問題,把自己的問題記錄下來,省的以後别人問自己遇到過什麼問題嗎?然後自己連個問題都說不出來。