? ? ?之前做過單點(diǎn)登錄剑按,方式是通過redis存儲(chǔ)token,本地瀏覽器加載cookie的方式驗(yàn)去redis驗(yàn)證叛拷,形式是跨域报亩,如httpclient或者dubbo等方式浴鸿。但是總感覺這種方式比較小家子氣。于是研究了一下shiro的單點(diǎn)登錄弦追。
shiro+CAS方式實(shí)現(xiàn)單點(diǎn)登錄
代碼地址:
git@github.com:oulexue/shiro-sso.git
一岳链、環(huán)境配置
?1.需要使用CAS提供的項(xiàng)目(cas-server中的),下載地址:
http://developer.jasig.org/cas/
版本選3.5.1或者3.5.2均可劲件,建議別太新
解壓后的目錄掸哑,我們需要兩個(gè)項(xiàng)目:
cas-server-webapp(單點(diǎn)登錄系統(tǒng)):
cas-server-support-jdbc:數(shù)據(jù)庫配置模塊:配置我們的數(shù)據(jù)庫,加入cas-server-webapp依賴
這兩個(gè)項(xiàng)目都是源碼包(maven版)零远,把它們導(dǎo)入到到eclipse苗分,直接構(gòu)建
直接運(yùn)行單點(diǎn)系統(tǒng)(cas-server-webapp)或者打war包,放在tomcat下改名為cas牵辣,然后啟動(dòng)訪問:http://ip:8080/cas
第一步摔癣、MySQL創(chuàng)建數(shù)據(jù)庫和表,(主要是用戶表,因?yàn)槲覀冎饕茄芯繂吸c(diǎn)登錄)
2.設(shè)置數(shù)據(jù)庫和表(使用mysql)纬向,主要是用戶表择浊,我們只研究單點(diǎn)登錄
在cas-server-webapp下添加mysql相關(guān)的jar
maven環(huán)境如果缺少插件,自行下載(可參考代碼中的pom文件逾条,在這里不多說)
修改deployerConfigContext.xml配置文件
首先增加一個(gè)datasource琢岩,通過增加一下的代碼實(shí)現(xiàn):
重啟tomcat,就可以用數(shù)據(jù)庫中的用戶進(jìn)行登錄了
3.tomcat添加https安全協(xié)議
? 這一步比較重要师脂,如果出錯(cuò)担孔,后面將會(huì)出現(xiàn)各種錯(cuò)誤
第一步:制作密鑰
切換到j(luò)dk的bin目錄下,執(zhí)行下面的命令
keytool -genkey -alias tomcat -keystore mykeystore -keyalg RSA -validity 2000
? ?注意:“名字與姓氏”應(yīng)該是域名(如localhost)吃警,輸成了姓名糕篇,和真正運(yùn)行的時(shí)候域名不符,會(huì)出問題
? ?口令隨意設(shè)置汤徽,后面會(huì)使用
接著執(zhí)行導(dǎo)出
keytool -export -alias tomcat -keystore mykeystore -file server.crt
接著再導(dǎo)入到j(luò)dk的安全目錄下(注意:要導(dǎo)入到j(luò)dk下面的jre目錄下娩缰,不是單獨(dú)的jre那個(gè)目錄,我們使用的是jdk7谒府,后面項(xiàng)目因?yàn)橐褂肧SL協(xié)議拼坎,全部都使用這個(gè)jdk)
keytool -import -alias tomcat -file server.crt -keystore e:/java/jdk7/jre/lib/security/cacerts
第二步:配置tomcat服務(wù)器
定位到tomcat服務(wù)器的安裝目錄, 找到conf下的server.xml文件
找到如下圖位置
取消注釋,修改為如下:
注意:keystorefile不是jre/lib下cacerts文件
到此環(huán)境搭建完成
二完疫、項(xiàng)目開發(fā)
隨意找兩個(gè)我們之前開發(fā)的shiro項(xiàng)目泰鸡,稍加改動(dòng),然后進(jìn)行單點(diǎn)登錄測(cè)試
一壳鹤、導(dǎo)入jar
除了shiro相關(guān)的jar外盛龄,要單獨(dú)再加一個(gè)shiro-cas包
修改spring-shiro.xml配置文件
修改的地方(詳情看注釋):
shiroDbRealm:casServerUrlPrefix和casService
shiroFilter:loginUrl和filters
casFilter
logoutFilter
casSubjectFactory
securityManager:subjectFactory
相關(guān)的路徑在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
改完后復(fù)制一個(gè)項(xiàng)目,改改項(xiàng)目名,和發(fā)布端口號(hào)
兩個(gè)項(xiàng)目路徑分別為:
http://localhost:8081
http://localhost:8082
接下來測(cè)試余舶,登錄任一系統(tǒng)啊鸭,跳轉(zhuǎn)至cas系統(tǒng)認(rèn)證,認(rèn)證通過后匿值,其他系統(tǒng)無須重新登錄赠制。注銷任何一個(gè)系統(tǒng)。其他系統(tǒng)也會(huì)注銷挟憔,需要再重新登錄
演示略
結(jié)束