Centos Stream 8 搭建Cas Server
1.1.版本
本文主要介绍 CAS 服务端的安装,使用到的软件版本:JDK 1.8.0_451、Tomcat 8.5.79、CAS 5.3.16。
1.2.安装
有两种安装方式:
方式一:使用模版中自带的build命令,但每次增加功能(修改pom.xml)支持都需要重新打包,修改配置文件需要到打包好的web项目目录下修改,然后重启tomcat服务器,比较繁琐。
方式二:使用maven的overlay支持,使用idea打开模版项目,设置好jdk版本,然后新建src/main/java和src/main/resources目录,将模版代码中的默认配置拷贝到resources目录下,使用maven打包,这样新建resources目录下的配置会覆盖模版代码中的默认配置,每次新增功能(修改pom.xml)或修改配置时,重新打包即可,比方式一简单,本篇文章推荐采用方式二安装部署
方式一
生成部署包
通过官方提供的 cas-overlay-template(https://github.com/apereo/cas-overlay-template/tree/5.3) 模板来生成部署包。
先 clone 项目到本地:
git clone https://github.com/apereo/cas-overlay-template.git -b 5.3
拉下来的具体版本为5.3.16,git clone完毕后,进入该目录,可看到如下文件结构:
[root@worker0 cas-overlay-template]# ll
total 60
-rw-r--r--. 1 root root 4252 Oct 12 21:00 build.cmd
-rwxr-xr-x. 1 root root 5419 Oct 12 21:00 build.sh
drwxr-xr-x. 3 root root 17 Oct 12 21:00 etc
-rw-r--r--. 1 root root 11358 Oct 12 21:00 LICENSE.txt
drwxr-xr-x. 2 root root 63 Oct 12 21:00 maven
-rwxr-xr-x. 1 root root 7098 Oct 12 21:00 mvnw
-rwxr-xr-x. 1 root root 5839 Oct 12 21:00 mvnw.bat
-rwxr-xr-x. 1 root root 8496 Oct 12 21:00 pom.xml
-rw-r--r--. 1 root root 2668 Oct 12 21:00 README.md
[root@worker0 cas-overlay-template]#
执行打包命令:
#进入安装目录
cd cas-overlay-template/#windows
build.cmd package#linux
sh build.sh package
命令执行完成之后会在 target 目录下生成 cas 的 web 应用及 cas.war 的包。linux 环境可以使用 build.sh 脚本。
......
Downloading from central: https://repo.maven.apache.org/maven2/asm/asm-util/3.2/asm-util-3.2.jar
Downloaded from central: https://repo.maven.apache.org/maven2/asm/asm-analysis/3.2/asm-analysis-3.2.jar (18 kB at 703 B/s)
Downloading from central: https://repo.maven.apache.org/maven2/com/google/guava/guava/18.0/guava-18.0.jar
Downloaded from central: https://repo.maven.apache.org/maven2/asm/asm-util/3.2/asm-util-3.2.jar (37 kB at 1.4 kB/s)
Downloaded from central: https://repo.maven.apache.org/maven2/org/jdom/jdom/1.1/jdom-1.1.jar (153 kB at 5.9 kB/s)
Downloaded from central: https://repo.maven.apache.org/maven2/commons-io/commons-io/1.3.2/commons-io-1.3.2.jar (88 kB at 2.8 kB/s)
Downloaded from central: https://repo.maven.apache.org/maven2/org/springframework/spring-core/4.3.21.RELEASE/spring-core-4.3.21.RELEASE.jar (1.1 MB at 27 kB/s)
Downloaded from central: https://repo.maven.apache.org/maven2/com/google/guava/guava/18.0/guava-18.0.jar (2.3 MB at 52 kB/s)
[INFO] Layout: WAR
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 06:10 min (Wall Clock)
[INFO] Finished at: 2025-10-12T21:09:28+08:00
[INFO] Final Memory: 21M/325M
[INFO] ------------------------------------------------------------------------
构建成功后,会在当前目录下生成target目录
[root@worker0 cas-overlay-template]# ll
total 60
-rw-r--r--. 1 root root 4252 Oct 12 21:00 build.cmd
-rwxr-xr-x. 1 root root 5419 Oct 12 21:00 build.sh
drwxr-xr-x. 3 root root 17 Oct 12 21:00 etc
-rw-r--r--. 1 root root 11358 Oct 12 21:00 LICENSE.txt
drwxr-xr-x. 2 root root 63 Oct 12 21:00 maven
-rwxr-xr-x. 1 root root 7098 Oct 12 21:00 mvnw
-rwxr-xr-x. 1 root root 5839 Oct 12 21:00 mvnw.bat
-rwxr-xr-x. 1 root root 8496 Oct 12 21:00 pom.xml
-rw-r--r--. 1 root root 2668 Oct 12 21:00 README.md
drwxr-xr-x. 5 root root 65 Oct 12 21:07 target
进入target目录,会看到有如下文件结构
[root@worker0 cas-overlay-template]# cd target/
[root@worker0 target]# ll
total 124016
drwxr-xr-x. 5 root root 48 Oct 12 21:07 cas
-rw-r--r--. 1 root root 126991812 Oct 12 21:07 cas.war
drwxr-xr-x. 2 root root 28 Oct 12 21:07 maven-archiver
drwxr-xr-x. 3 root root 18 Oct 12 21:07 war
[root@worker0 target]#
各文件/目录说明如下:
cas cas.war解压后的目录,放到tomcat的webapps目录下可直接运行
cas.war cas.war,放到tomcat的webapps目录下可直接运行
maven-archiver maven坐标信息
war 不知道干什么用的
生成密钥库
CAS 默认需要使用 Https 来访问,可使用 Java 的 keytool 工具来生成密钥库,然后使用该密钥库在 Tomcat 中配置 SSL。
keytool -genkeypair -alias cas-tomcat -keyalg RSA -keystore casServer.keystore
以下为密钥库生成过程,密码为itcast
PS D:\cas-overlay-template\etc\cas> keytool -genkeypair -alias cas-tomcat -keyalg RSA -keystore casServer.keystore
输入密钥库口令:
再次输入新口令:
您的名字与姓氏是什么?[Unknown]: itcast
您的组织单位名称是什么?[Unknown]: itcast
您的组织名称是什么?[Unknown]: itcast
您所在的城市或区域名称是什么?[Unknown]: jinan
您所在的省/市/自治区名称是什么?[Unknown]: shandong
该单位的双字母国家/地区代码是什么?[Unknown]: CN
CN=itcast, OU=itcast, O=itcast, L=jinan, ST=shandong, C=CN是否正确?[否]: y输入 <cas-tomcat> 的密钥口令(如果和密钥库口令相同, 按回车):
再次输入新口令:Warning:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore casServer.keystore -destkeystore casServer.keystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。
PS D:\cas-overlay-template\etc\cas>
Tomcat 中配置 SSL
将生成的 casServer.keystore 文件复制到tomcat的conf目录下,在 conf/server.xml 中新增一个 Connector:
<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" /><Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"maxThreads="150" SSLEnabled="true"><SSLHostConfig><Certificate certificateKeystoreFile="conf/casServer.keystore"certificateKeystoreType="JKS" certificateKeystorePassword="itcast" /></SSLHostConfig>
</Connector>
部署应用
把生成的 cas 应用目录或 cas.war 拷贝到 Tomcat 的 webapps 目录下并启动 Tomcat;
启动完成后访问应用:https://127.0.0.1:8443/cas,默认用户名密码为:casuser/Mellon
方式二
也是先clone下来项目目录
git clone https://github.com/apereo/cas-overlay-template.git -b 5.3
然后使用idea打开cas-overlay-template,Project Structure设置jdk为1.8,右侧Maven Profiles打开default和jdk1.8,
在目录中新建src/main/java和src/main/resources,要覆盖的类或配置都放入新建的这两个目录中,项目默认的类和配置都在overlays目录下,将下图所示配置拷贝到新建的resources目录下,打包时就会拿这里的覆盖overlays下默认的,这样方便项目增加功能
1.3.配置
配置日志存储路径
默认日志存储在/etc/cas/logs
,不建议修改。
修改 WEB-INF\classes\log4j2.xml 文件中的日志文件保存目录:
<Properties><Property name="baseDir">/var/cas/logs</Property>
</Properties>
配置查看 Dashboard权限
目前情况下是没有权限查看 Dashboard 的,需要在 WEB-INF\classes\application.properties 中放开权限:
#修改如下配置,开启监控端点
cas.monitor.endpoints.enabled=true
cas.monitor.endpoints.sensitive=false#新增如下配置,设置能访问的ip,.+ 表示任意ip
cas.adminPagesSecurity.ip=127.0.0.1
修改完后重启 Tomcat,重新登录,注意,这里写的127.0.0.1,必须用127.0.0.1访问,用localhost不行,不然还是访问不了Dashboard
配置jdbc认证登录
默认情况下用户信息配置在 WEB-INF\classes\application.properties 中:
cas.authn.accept.users=casuser::Mellon
CAS 支持通过 JDBC 方式认证登录,以满足实际生成的需要。
引入 JDBC 的组件
在 clone 项目的 pom.xml 文件中增加如下配置:
<dependencies><dependency><groupId>org.apereo.cas</groupId><artifactId>cas-server-webapp${app.server}</artifactId><version>${cas.version}</version><type>war</type><scope>runtime</scope></dependency><!--...Additional dependencies may be placed here...--><!--jdbc认证登录依赖start--><dependency><groupId>org.apereo.cas</groupId><artifactId>cas-server-support-jdbc</artifactId><version>${cas.version}</version></dependency><dependency><groupId>org.apereo.cas</groupId><artifactId>cas-server-support-jdbc-drivers</artifactId><version>${cas.version}</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.28</version></dependency><!--jdbc认证登录依赖end-->
</dependencies>
重新打包 build.cmd package,再把应用重新部署到 Tomcat 中。
创建用户表
每个应用系统一般都有用户表,这一步是不需要的;这里为了演示创建一个测试的用户表:
CREATE TABLE `cas_user` (`id` bigint PRIMARY KEY,`user_name` varchar(32) NOT NULL COMMENT '用户名',`password` varchar(64) NOT NULL COMMENT '密码',`create_time` datetime COMMENT '创建时间',`expired_flag` int(1) NOT NULL DEFAULT 0 COMMENT '是否过期',`disabled_flag` int(1) NOT NULL DEFAULT 0 COMMENT '是否有效'
)
并插入测试数据,密码使用 MD5 加密,这里密码为 123456,MD5 加密后用十六进制表示为:e10adc3949ba59abbe56e057f20f883e
insert into cas_user(id,user_name,password,create_time)
values (1,'test','e10adc3949ba59abbe56e057f20f883e',now());
应用中配置数据库信息
在 WEB-INF\classes\application.properties 中修改配置:
#该行注释掉
#cas.authn.accept.users=casuser::Mellon#增加下列配置
#查询用户信息的SQL,会把用户名作为参数传进来
cas.authn.jdbc.query[0].sql=select * from cas_user where user_name=?
#指定密码字段
cas.authn.jdbc.query[0].fieldPassword=password
#指定过期字段
cas.authn.jdbc.query[0].fieldExpired=expired_flag
#指定是否可用字段
cas.authn.jdbc.query[0].fieldDisabled=disabled_flagcas.authn.jdbc.query[0].dialect=org.hibernate.dialect.MySQLDialect
cas.authn.jdbc.query[0].driverClass=com.mysql.cj.jdbc.Driver
cas.authn.jdbc.query[0].url=jdbc:mysql://192.168.245.1130:3306/cas?useUnicode=true&characterEncoding=UTF-8&useSSL=false
cas.authn.jdbc.query[0].user=tcwgq
cas.authn.jdbc.query[0].password=112113#默认加密策略,NONE 不加密
cas.authn.jdbc.query[0].passwordEncoder.type=DEFAULT
cas.authn.jdbc.query[0].passwordEncoder.characterEncoding=UTF-8
cas.authn.jdbc.query[0].passwordEncoder.encodingAlgorithm=MD5
重启 Tomcat,使用 test/123456 登录 CAS 系统。
票据持久化
默认票据保存在内存中,集群中个节点无法共享;CAS 提供多种票据持久化的方法,如:JMS、JPA、MongoDB、Redis、Cassandra 等等,这里使用 Redis 来持久票据。
引入依赖
在 cas-overlay-template 的 pom.xml 文件中引入相关依赖:
<profile><activation><activeByDefault>true</activeByDefault></activation><id>default</id><dependencies><dependency><groupId>org.apereo.cas</groupId><artifactId>cas-server-webapp${app.server}</artifactId><version>${cas.version}</version><type>war</type><scope>runtime</scope></dependency>......<!--票据持久化依赖start--><dependency><groupId>org.apereo.cas</groupId><artifactId>cas-server-support-redis-ticket-registry</artifactId><version>${cas.version}</version></dependency><!--票据持久化依赖end--></dependencies>
</profile>
重新打包 build.cmd package,再把应用重新部署到 Tomcat 中。
配置 Redis 信息
在 WEB-INF\classes\application.properties 中增加配置:
cas.ticket.registry.redis.host=192.168.245.130
cas.ticket.registry.redis.database=0
cas.ticket.registry.redis.port=6379
cas.ticket.registry.redis.usePool=true
详细说明可参考官方文档:https://apereo.github.io/cas/6.5.x/ticketing/Redis-Ticket-Registry.html (5.3 版本的文档已经没有了,这里使用 6.5 版本的文档);配置完后,重启应用即可。
Session 持久化(可选)
Session 持久化用于 CAS 实例之间共享会话状态和会话故障转移;这一步是可选的,不建议使用,因为用户 CAS 会话往往是短期的,并且体验更像是请求-响应风格,而不是面向会话的。
引入依赖
在 cas-overlay-template 的 pom.xml 文件中引入相关依赖:
<profile><activation><activeByDefault>true</activeByDefault></activation><id>default</id><dependencies><dependency><groupId>org.apereo.cas</groupId><artifactId>cas-server-webapp${app.server}</artifactId><version>${cas.version}</version><type>war</type><scope>runtime</scope></dependency>......<!--Session持久化依赖start--><dependency><groupId>org.apereo.cas</groupId><artifactId>cas-server-webapp-session-redis</artifactId><version>${cas.version}</version></dependency><!--Session持久化依赖end--></dependencies>
</profile>
重新打包 build.cmd package,再把应用重新部署到 Tomcat 中。
配置 Session 持久信息
在 WEB-INF\classes\application.properties 中增加配置:
cas.webflow.session.storage=true
spring.session.store-type=redis
spring.redis.host=192.168.245.130
spring.redis.port=6379
详细说明可参考官方文档:https://apereo.github.io/cas/6.5.x/webflow/Webflow-Customization-Sessions.html (5.3 版本的文档已经没有了,这里使用 6.5 版本的文档);配置完后,重启应用即可。
使用 Http 方式登录
由于 Https 需要配置证书,比较麻烦,也不方便 CAS 客户端和 CAS 服务端的通信,可以修改为使用 Http 访问系统。
修改 HTTPSandIMAPS-10000001.json 文件
修改 WEB-INF\classes\services\HTTPSandIMAPS-10000001.json,增加 http 协议:
默认长这样
{"@class" : "org.apereo.cas.services.RegexRegisteredService","serviceId" : "^(https|imaps)://.*","name" : "HTTPS and IMAPS","id" : 10000001,"description" : "This service definition authorizes all application urls that support HTTPS and IMAPS protocols.","evaluationOrder" : 10000
}
中间添加http
{"@class" : "org.apereo.cas.services.RegexRegisteredService","serviceId" : "^(https|http|imaps)://.*","name" : "HTTPS and IMAPS","id" : 10000001,"description" : "This service definition authorizes all application urls that support HTTPS and IMAPS protocols.","evaluationOrder" : 10000
}
修改 application.properties 文件
修改 WEB-INF\classes\application.properties 文件,增加如下配置:
cas.tgc.secure=false
cas.warningCookie.secure=false
cas.serviceRegistry.initFromJson=true
Tomcat 改回 Http 协议
<Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" />
重启 Tomcat,通过 Http 协议访问 CAS:http://127.0.0.1:8443/cas
集群部署
集群架构
官方推荐的集群架构如下:
集群规划
ip | 用途 |
---|---|
192.168.245.130 | CAS 服务端,nginx,redis |
192.168.245.131 | CAS 服务端 |
192.168.245.132 | CAS 服务端 |
代理配置
这里使用 Nginx 作为代理服务器,配置如下:
http {......upstream cas {server 192.168.245.130:8080 weight=1;server 192.168.245.131:8080 weight=1;server 192.168.245.132:8081 weight=1;ip_hash;}server {listen 8080;server_name localhost;......location /cas {proxy_pass http://cas/cas;}}
}
启动 Nginx 后,就可以通过 http://192.168.245.130:8080/cas 来访问 CAS 了。
1.4.启动
启动tomcat即可
1.5.访问
http方式
可以正常访问
http://localhost:8080/cas可以正常访问
http://127.0.0.1:8080/cas
https方式,域名方式需要配置域名映射
可以正常访问
https://localhost:8443/cas可以正常访问
https://127.0.0.1:8443/cas本机ip访问,可以正常访问
https://192.168.0.103:8443/cas可以正常访问
https://cas.example.org:8443/cas