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
相关推荐
一个很帅的帅哥6 小时前
git命令大全
大数据·git·elasticsearch
Energet!c6 小时前
Nginx access 日志通过 Filebeat 8.15.5 写入 Elasticsearch 8 实战指南
nginx·elasticsearch·filebeat·openresty
broad-sky6 小时前
Ubuntu上查看USB相机连接的是哪个口,如何查看
linux·数码相机·ubuntu
秋深枫叶红6 小时前
嵌入式第三十七篇——linux系统编程——线程控制
linux·学习·线程·系统编程
shaohui9736 小时前
ARMv7 linux中断路由以及处理
linux·gic·cpsr·armv7
三小尛6 小时前
linux的开发工具vim
linux·运维·vim
陈陈爱java6 小时前
Conda 常用命令行
linux·windows·conda
twdnote6 小时前
dokcer 环境中集成LibreOffice
linux
ChristXlx6 小时前
Linux安装redis(虚拟机适用)
linux·运维·redis
源文雨7 小时前
PVE实现USB硬盘盒在备份前自动上电/结束后自动断电脚本
linux·运维·服务器·备份·perl·pve·usb硬盘盒