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 文件中增加如下配置:

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
相关推荐
鸽芷咕5 小时前
Rokid 手势识别技术深度解析:解锁 AR 无接触交互的核心秘密
linux
一枚正在学习的小白6 小时前
PG数据文件位置迁移
linux·运维·服务器·数据库
Tfly__6 小时前
Ubuntu 20.04 安装Aerial Gym Simulator - 基于 Gym 的无人机强化学习仿真器
linux·人工智能·ubuntu·github·无人机·强化学习·运动规划
博睿谷IT99_6 小时前
Linux 云计算核心技术:原理、组件与 K8s 实战部署
linux·kubernetes·云计算
疯癫的老码农6 小时前
【Linux环境下安装】SpringBoot应用环境安装(二)-Redis安装
linux·spring boot·redis
yumgpkpm6 小时前
CMP (类Cloudera) CDP7.3(400次编译)在华为鲲鹏Aarch64(ARM)信创环境中的性能测试过程及命令
大数据·hive·hadoop·python·elasticsearch·spark·cloudera
点亮一颗LED(从入门到放弃)7 小时前
SQLite3数据库——Linux应用
linux·数据库·sqlite
我科绝伦(Huanhuan Zhou)7 小时前
Systemctl 与 Systemd 全面指南:Linux 系统服务管理详解
linux·服务器·网络