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 文件中增加如下配置:
            
            
              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_flag
cas.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 文件中引入相关依赖:
            
            
              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 文件中引入相关依赖:
            
            
              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