關於cas單點登陸的原理及介紹這裏不作說明了,直接開始:java
一、war包下載mysql
去官網(https://www.apereo.org/projects/cas/download-cas)下載cas_server-webapp_xxx.war文件,這裏使用的是cas-server-webapp-4.0.0.war。(這裏吐槽下,因爲cas源碼及war包都已經放到github上面去了,致使下載速度很慢或者沒法下載,最後無奈之下去CSDN下載了。。。)git
二、建立證書github
證書是單點登陸認證系統中很重要的一把鑰匙,客戶端於服務器的交互安全靠的就是證書;因爲是我的學習測試因此就直接用JDK自帶的keytool工具生成證書;若是之後真正在產品環境中使用確定要去證書提供商去購買,證書認證通常都是由VeriSign認證,中文官方網站:http://www.verisign.com/cn/web
用JDK自帶的keytool工具生成證書:sql
keytool -genkey -alias cas -keyalg RSA -keystore e:/keys/cas
根據提示信息輸入相關數據回車便可(這裏注意要記住建立時的密碼)。數據庫
三、導出證書apache
keytool -export -file e:/keys/cas.crt -alias cas -keystore e:/keys/cas
若是提示:tomcat
keytool error: java.io.IOException: Keystore was tampered with, or password was incorrect
那麼請輸入密碼:changeit
安全
至此導出證書完成,能夠分發給應用的JDK使用了。
四、爲客戶端的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服務器。
五、應用證書到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"/>
參數說明:
六、啓動tomcat服務器
將第1步下載好的war包放到tomcat的webapp目錄下,啓動tomcat,訪問https://localhost:8443/cas/login頁面,輸入casuser/Mellon能夠成功登陸表示服務器已經搭建完成。
查看配置文件deployerConfigContext.xml能夠獲取默認的用戶名和密碼信息,後續會詳細說明該配置文件。
登陸成功
七、數據庫用戶認證方式配置
在以前的步驟裏面,咱們已經初步完成了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:除了代碼以外,咱還能夠聊點別的,有興趣能夠關注個人我的微信公衆號!