? ? ?之前做過單點登錄,方式是通過redis存儲token,本地瀏覽器加載cookie的方式驗去redis驗證,形式是跨域,如httpclient或者dubbo等方式。但是總感覺這種方式比較小家子氣。于是研究了一下shiro的單點登錄。
shiro+CAS方式實現單點登錄
代碼地址:
git@github.com:oulexue/shiro-sso.git
一、環境配置
?1.需要使用CAS提供的項目(cas-server中的),下載地址:
http://developer.jasig.org/cas/
版本選3.5.1或者3.5.2均可,建議別太新
解壓后的目錄,我們需要兩個項目:
cas-server-webapp(單點登錄系統):
cas-server-support-jdbc:數據庫配置模塊:配置我們的數據庫,加入cas-server-webapp依賴
這兩個項目都是源碼包(maven版),把它們導入到到eclipse,直接構建
直接運行單點系統(cas-server-webapp)或者打war包,放在tomcat下改名為cas,然后啟動訪問:http://ip:8080/cas
第一步、MySQL創建數據庫和表,(主要是用戶表,因為我們主要是研究單點登錄)
2.設置數據庫和表(使用mysql),主要是用戶表,我們只研究單點登錄
在cas-server-webapp下添加mysql相關的jar
maven環境如果缺少插件,自行下載(可參考代碼中的pom文件,在這里不多說)
修改deployerConfigContext.xml配置文件
首先增加一個datasource,通過增加一下的代碼實現:
重啟tomcat,就可以用數據庫中的用戶進行登錄了
3.tomcat添加https安全協議
? 這一步比較重要,如果出錯,后面將會出現各種錯誤
第一步:制作密鑰
切換到jdk的bin目錄下,執行下面的命令
keytool -genkey -alias tomcat -keystore mykeystore -keyalg RSA -validity 2000
? ?注意:“名字與姓氏”應該是域名(如localhost),輸成了姓名,和真正運行的時候域名不符,會出問題
? ?口令隨意設置,后面會使用
接著執行導出
keytool -export -alias tomcat -keystore mykeystore -file server.crt
接著再導入到jdk的安全目錄下(注意:要導入到jdk下面的jre目錄下,不是單獨的jre那個目錄,我們使用的是jdk7,后面項目因為要使用SSL協議,全部都使用這個jdk)
keytool -import -alias tomcat -file server.crt -keystore e:/java/jdk7/jre/lib/security/cacerts
第二步:配置tomcat服務器
定位到tomcat服務器的安裝目錄, 找到conf下的server.xml文件
找到如下圖位置
取消注釋,修改為如下:
注意:keystorefile不是jre/lib下cacerts文件
到此環境搭建完成
二、項目開發
隨意找兩個我們之前開發的shiro項目,稍加改動,然后進行單點登錄測試
一、導入jar
除了shiro相關的jar外,要單獨再加一個shiro-cas包
修改spring-shiro.xml配置文件
修改的地方(詳情看注釋):
shiroDbRealm:casServerUrlPrefix和casService
shiroFilter:loginUrl和filters
casFilter
logoutFilter
casSubjectFactory
securityManager:subjectFactory
相關的路徑在shiro.properties
shiro.loginUrl=https://localhost/cas/login?service=http://localhost:8082/shiro-cas
shiro.logoutUrl=https://localhost/cas/logout?service=http://localhost:8082/shiro-cas
shiro.cas.serverUrlPrefix=https://localhost/cas
shiro.cas.service=http://localhost:8082/shiro-cas
shiro.failureUrl=/login
shiro.successUrl=/index
改完后復制一個項目,改改項目名,和發布端口號
兩個項目路徑分別為:
http://localhost:8081
http://localhost:8082
接下來測試,登錄任一系統,跳轉至cas系統認證,認證通過后,其他系統無須重新登錄。注銷任何一個系統。其他系統也會注銷,需要再重新登錄
演示略
結束