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