關於cas單點登錄的原理及介紹這里不做說明了,直接開始:
1、war包下載
去官網(https://www.apereo.org/projects/cas/download-cas)下載cas_server-webapp_xxx.war文件,這里使用的是cas-server-webapp-4.0.0.war。(這里吐槽下,由於cas源碼及war包都已經放到github上面去了,導致下載速度很慢或者無法下載,最后無奈之下去CSDN下載了。。。)
2、創建證書
證書是單點登錄認證系統中很重要的一把鑰匙,客戶端於服務器的交互安全靠的就是證書;由於是個人學習測試所以就直接用JDK自帶的keytool工具生成證書;如果以后真正在產品環境中使用肯定要去證書提供商去購買,證書認證一般都是由VeriSign認證,中文官方網站:http://www.verisign.com/cn/
用JDK自帶的keytool工具生成證書:
keytool -genkey -alias cas -keyalg RSA -keystore e:/keys/cas
根據提示信息輸入相關數據回車即可(這里注意要記住創建時的密碼)。
3、導出證書
keytool -export -file e:/keys/cas.crt -alias cas -keystore e:/keys/cas
如果提示:
keytool error: java.io.IOException: Keystore was tampered with, or password was incorrect
那么請輸入密碼:changeit
至此導出證書完成,可以分發給應用的JDK使用了。
4、為客戶端的JVM導入證書
keytool -import -keystore "C:\Program Files\Java\jdk1.8.0_101\jre\lib\security\cacerts" -file e:/keys/cas.crt -alias cas
同第3步一樣,如果提示輸入密碼,請輸入changeit,至此證書的創建、導出、導入到客戶端JVM都已完成,下面開始使用證書到Web服務器中,這里我使用的是tomcat7服務器。
5、應用證書到web服務器
打開tomcat目錄的conf/server.xml文件,設置如下:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="e:/keys/cas" keystorePass="111111"/>
參數說明:
- keystoreFile:在第一步創建的key存放位置
- keystorePass:創建證書時的密碼
6、啟動tomcat服務器
將第1步下載好的war包放到tomcat的webapp目錄下,啟動tomcat,訪問https://localhost:8443/cas/login頁面,輸入casuser/Mellon可以成功登錄表示服務器已經搭建完成。
查看配置文件deployerConfigContext.xml可以獲取默認的用戶名和密碼信息,后續會詳細說明該配置文件。
登錄成功
7、數據庫用戶認證方式配置
在之前的步驟里面,我們已經初步完成了cas單點登錄服務器的搭建,但是很明顯上述用戶的驗證方式不是我們想要的,下面我們來進一步配置cas服務器怎么讀取數據庫的信息進行身份驗證,首先打開:
webapp/cas/WEB-INF/deployerConfigContext.xml
然后進行如下配置修改:
<!--**********************************注釋*****************************************************
<entry key-ref="primaryAuthenticationHandler" value-ref="primaryPrincipalResolver" />
**************************************注釋**************************************************--> <entry key-ref="dbAuthHandler" value-ref="primaryPrincipalResolver" /> <!--**********************************注釋***************************************************** <bean id="primaryAuthenticationHandler" class="org.jasig.cas.authentication.AcceptUsersAuthenticationHandler"> <property name="users"> <map> <entry key="casuser" value="Mellon"/> </map> </property> </bean> **************************************注釋**************************************************--> <!--**********************************新增**************************************************--> <!-- Define the DB Connection --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" p:driverClass="com.mysql.jdbc.Driver" p:jdbcUrl="jdbc:mysql://localhost:3306/ssm?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8" p:user="root" p:password="1234" /> <!-- Define the encode method--> <bean id="passwordEncoder" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder" c:encodingAlgorithm="MD5" p:characterEncoding="UTF-8" /> <bean id="dbAuthHandler" class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler" p:dataSource-ref="dataSource" p:sql="select password from t_user where username=?" p:passwordEncoder-ref="passwordEncoder"/> <!--***********************************新增*************************************************-->
最后,加入以下依賴包:c3p0-0.9.1.2.jar,MySQL-connector-Java-5.1.21.jar,cas-server-support-jdbc-4.0.0.jar
重啟tomcat服務器,發現已經可以使用數據庫用戶進行登錄了。
----------------------------------------------------------------------------------------------------------------------------
ps:除了代碼之外,咱還可以聊點別的,有興趣可以關注我的個人微信公眾號!