CAS單點登錄學習筆記–CAS Server搭建(一)
最近在學習單點登錄框架CAS,首先先嚐試搭建CAS Server,在其中遇到了各種問題,也參考了很多前輩的博客文章。做一個總結,避免以後走彎路。
一、下載cas server源代碼,這裏下載cas 4.2.7版本
1、下載地址:https://github.com/apereo/cas/releases/tag/v4.2.7
2、首先確保本地安裝配置好了gradle,jdk。我本地配置 gradle用的4.6版本;jdk用的1.8版本
3、進入DOS窗口運行gradle -version和java -version看環境是否配置好。
4、解壓第一步下載的cas 4.2.7版本,進入到cas-server-webapp目錄,執行gradle build
注意事項:
1、cas 4.2.7版本默認jdk是1.7,我本地配置的jdk1.8;所以修改代碼中的jdk版本。gradle.properties
sourceCompatibility=1.8
targetCompatibility=1.8
2、有個jar包中央倉庫中沒有,nl.eveoh:gradle-aspectj:1.6,自己去github:https://github.com/eveoh/gradle-aspectj下載下來編譯打包,並上傳到Maven倉庫
mvn install:install-file -Dfile=F:\workspace_sourceCode\gradle-aspectj-1.6\gradle-aspectj-1.6\build\libs\gradle-aspectj-1.6.jar -DgroupId=nl.eveoh -DartifactId=gradle-aspectj -Dversion=1.6 -Dpackaging=jar
3、修改build.gradle的倉庫下載順序,優先有本地倉庫下載jar包。
二、生成jdk證書
1、生成jks
keytool -genkey -alias cascer -keyalg RSA -keypass 123456 -keystore cascer.jks -storepass 12345
2、導出cer證書
keytool -export -file cascer.cer -alias cascer -keystore cascer.jks -storepass 123456
3、將cer證書導入到jdk中被信任:
將cascer.cer拷貝到D:\tools\java\jre1.8.0_25\lib\security,進入DOS窗口的D:\tools\java\jre1.8.0_25\lib\security目錄
輸入:keytool -import -trustcacerts -alias cascer -file cascer.cer -keystore "D:\tools\java\jre1.8.0_25\lib\security\cacerts"
輸入密碼:changeit
java中cacerts證書庫默認密碼爲changeit
需要自行修改cacerts文件路徑
如果報錯FileNotFound錯誤就是沒導入成功,cas客戶端訪問的時候會報錯。
三、配置TOMCAT
1、將第生成的包cas-server-webapp-4.2.7.war,拷貝到webapps目錄下,修改成cas.war包,解壓,然後刪除war包
2、配置修改tomcat的配置conf/server.xml
<Connector port="8443"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" keystoreFile="conf/cascer.jks"
keystorePass="123456" protocol="org.apache.coyote.http11.Http11NioProtocol"/>
3、修改WEB-INF\cas.properties的默認登錄用戶名和密碼,多個用戶名和密碼用逗號分隔
accept.authn.users=casuser::Mellon,root/123456
4、啓動tomcat,瀏覽器訪問:https://localhost:8443/cas,用casuser/Mellon登錄
登錄成功:
四、通過訪問數據庫,查詢表,登錄驗證
1、TOMCAT項目目錄\webapps\cas\WEB-INF\lib,新增兩個jar包cas-server-support-jdbc-4.2.7.jar,mysql-connector-java-5.1.32.jar
2、修改deployerConfigContext.xml,註釋掉
<!--<alias name="acceptUsersAuthenticationHandler" alias="primaryAuthenticationHandler" /> -->
新增配置:
<!--begin 從數據庫中查詢用戶名密碼 -->
<bean id="MD5PasswordEncoder" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder" autowire="byName">
<constructor-arg value="MD5"/>
</bean>
<bean id="queryDatabaseAuthenticationHandler" name="primaryAuthenticationHandler" class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
<property name="passwordEncoder" ref="MD5PasswordEncoder" />
</bean>
<alias name="dataSource" alias="queryDatabaseDataSource"/>
<bean id="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource"
p:driverClass="com.mysql.jdbc.Driver"
p:jdbcUrl="jdbc:mysql://127.0.0.1:3306/cas_server?characterEncoding=utf8"
p:user="root"
p:password="123456"
p:initialPoolSize="6"
p:minPoolSize="6"
p:maxPoolSize="18"
p:maxIdleTimeExcessConnections="120"
p:checkoutTimeout="10000"
p:acquireIncrement="6"
p:acquireRetryAttempts="5"
p:acquireRetryDelay="2000"
p:idleConnectionTestPeriod="30"
p:preferredTestQuery="select 1"/>
<!--begin 從數據庫中查詢用戶名密碼 -->
備註:注意修改成自己的數據庫連接
3、修改\webapps\cas\WEB-INF\cas.properties文件
cas.jdbc.authn.query.sql=select password from user where userName=? and isValid='1'
4、執行建表語句
drop table user;
CREATE TABLE `user` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`userName` varchar(32) DEFAULT NULL COMMENT '用戶名',
`password` varchar(64) DEFAULT NULL COMMENT ' MD5加密的密碼',
`isValid` char(1) DEFAULT '0' COMMENT ' 是否有效 0-無效,1-有效',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1000000000 DEFAULT CHARSET=utf8;
INSERT INTO `user`(userName,password,isValid) VALUES ('root', 'e10adc3949ba59abbe56e057f20f883e', '1');
INSERT INTO `user`(userName,password,isValid) VALUES ('casuser', '9414f9301cdb492b4dcd83f8c711d8bb', '1');
備註:密碼是MD5加密的
用戶名/密碼:root/123456,casuser/Mellon
5、重新登錄驗證
參考博客:
https://blog.51cto.com/wangguangshuo/2050364
https://blog.csdn.net/u010734213/article/details/81774405