Appearance
CAS Overlay 5.3.x Maven 开发版
项目简介
CAS (Central Authentication Service) 是 Apereo 基金会维护的企业级开源单点登录系统,为企业应用提供统一的身份认证与授权机制。本项目基于 CAS Overlay 5.3.x 版本进行定制化开发,提供完整的开发基座、配置模板和部署方案,旨在帮助开发者快速构建、定制和部署符合企业需求的 CAS 认证服务。

技术支持
- 技术支持: 北京必码科技工作室
- 官方文档: https://bima.cc
- 官方店铺: https://bima.taobao.com
- 联系邮箱: bima.cc@qq.com
- 联系微信: e18929958
核心改造
CAS-Overlay 企业级定制开发版
专为企业级身份认证场景深度二次开发,彻底重构原生 CAS 架构,开箱即用、零门槛适配企业各类账号体系,完美支撑微服务、分布式、容器化部署需求,解决原生 CAS 部署配置复杂、调试困难等核心痛点。
核心二次开发功能:
- 01:架构现代化升级 — 摒弃传统 WAR 包架构,全面转型 SpringBoot 标准 JAR 包架构,部署流程极简优化,原生适配微服务生态与 Docker / K8s 容器化部署,兼容企业现代化运维体系。
- 02:双源认证全覆盖 / JDBC + LDAP — 集成 MyBatis 数据库访问框架,支持 JDBC 数据库账号认证 + LDAP 目录服务双认证模式,无缝对接企业现有账号存储方案,无需改造原有账号体系,满足内网、混合架构等全场景身份校验需求。
- 03:本地开发零障碍 / 自定义启动类 — 提供专属CasWebApplication主启动类,支持本地直接 Debug 启动、断点调试,告别原生 CAS 复杂启动配置,大幅提升开发调试效率。
- 04:灵活自定义认证逻辑 — 摒弃原生固定校验规则,支持完全自定义用户名 / 密码登录校验逻辑(JDBC模式),可按需再扩展验证码、多因子校验、账号状态校验等个性化验证规则。
- 05:双协议认证 / 任意自定义返回值 — 同时支持 OAuth2.0 + OIDC 双标准认证协议,兼容各类第三方应用对接需求;支持自定义认证返回值,可灵活输出用户详情、角色权限、部门信息等任意自定义业务数据。
- 06:分布式集群部署 / 高可用支撑 — 基于 Redis 实现 Ticket 集中存储,支持多节点分布式集群部署,无状态设计保障系统高可用性、横向扩展性,满足企业高并发访问场景。
- 07:安全加固 / 杜绝默认风险 — 强制关闭 CAS 原生默认账号密码登录,全权交由自定义认证类管控,从源头消除安全漏洞,符合企业级安全管控标准。
- 08:全量前端资源开放 / 可视化定制 — 完整提取前端静态资源、页面模板,无加密、无限制,支持开发者根据企业品牌自由定制登录页、首页、错误页等前端界面。
- 09:国际化多语言支持 — 内置中文、英文等多语言配置,满足企业国际化业务、跨区域使用需求。(示例)
- 10:容器化 / 自动化部署 — 内置标准化 DockerFile 与 Jenkins 部署脚本,一键完成容器打包、自动化部署,无缝接入企业 CI / CD 持续集成流程。
环境要求
- JDK:1.8
- MySQL:8.0.33
- Redis:7.2.4
- LDAP:3.1.0
- Maven:3.9+
- Eclipse IDE
- Visual Studio Code
- 构建过程需要访问 Maven 中央仓库,确保网络连接正常
数据库配置
1. 数据库初始化
本项目提供了完整的数据库初始化脚本,位于 src/main/resources/db_uc_20260113.sql。该脚本包含以下内容:
- 基础认证表:包括
OAUTH_TOKENS、SERVICETICKET、TICKETGRANTINGTICKET、TRANSIENTSESSIONTICKET等 CAS 核心票据表 - 用户管理表:包括
user_info用户信息表,默认初始化了超级管理员账号 - 业务系统表:包括
business_info、business_role、business_permission等业务系统管理表 - 公司管理表:包括
company_info、company_user、company_permission等公司管理表
初始化步骤:
- 创建数据库:在 MySQL 数据库中创建名为
db_uc的数据库 - 执行初始化脚本:使用 MySQL 客户端工具执行
db_uc_20260113.sql脚本 - 验证初始化:确认所有表结构已创建,且
user_info表中包含默认的超级管理员账号
2. 数据库连接配置
数据库连接配置位于 src/main/resources/spring-common.xml 文件中,主要配置项如下:
xml
<bean id="dataSource" name="dataSourceTicket"
class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<!-- 将下面数据库配置替换为自己的 -->
<property name="url"
value="jdbc:mysql://192.168.1.30:3306/db_uc?useUnicode=true&allowMultiQueries=true&characterEncoding=utf8"></property>
<property name="username" value="root"></property>
<property name="password" value="DS423PLUS-MySQL-1234567890!"></property>
</bean>1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
配置说明:
- driverClassName:数据库驱动类名,使用 MySQL 驱动
- url:数据库连接地址,格式为
jdbc:mysql://主机:端口/数据库名?参数 - username:数据库用户名
- password:数据库密码
- 连接池配置:包括初始连接数、最大连接数、最小空闲连接数等
修改步骤:
- 打开
src/main/resources/spring-common.xml文件 - 修改
url、username、password为实际的数据库连接信息 - 保存文件并重新构建项目
3. 默认管理员账号
初始化脚本中默认创建了超级管理员账号:
- 用户名:admin
- 密码:admin(密码已加密存储)
首次登录后,建议修改默认密码(cc.bima.cas.utils.Sha256Utils 使用main制作新的密码,注意盐值需要与数据库中的盐值一致)以提高安全性。
快速开始
方式一:开发者模式(以 Eclipse 工具为例)
- 导入项目:
- 在 Eclipse 中选择
File->Import->Maven->Existing Maven Project - 选择项目根目录,点击
Finish完成导入
- 在 Eclipse 中选择
- 启动服务:
- 找到并打开
cc.bima.cas.CasWebApplication主启动类 - 右键点击该类,选择
Debug As->Java Application启动服务 - 服务启动后,可在控制台查看启动日志和调试信息
- 找到并打开
方式二:命令行模式(标准 Maven 命令)
bash
# 构建项目(清理并编译)
mvn clean compile
# 直接启动服务(开发测试)
mvn spring-boot:run
# 打包为可执行 JAR 文件(生产部署)
mvn clean package1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
方式三:Docker 容器模式(基于 Jenkins 构建)
构建 Docker 镜像:
Build Steps -> 执行 shell
bash# 1. 清理旧的 JAVA_HOME,避免冲突 unset JAVA_HOME # 2. 配置容器内真实的 JDK 8 环境 export JAVA_HOME=/usr/local/jdk8 export PATH=$JAVA_HOME/bin:/usr/bin:/bin:/usr/sbin:/sbin # 3. 显式配置 Maven 路径 export M2_HOME=/usr/local/maven export PATH=$M2_HOME/bin:$PATH # 4. 配置 Maven 国内源(加速依赖下载) mkdir -p ~/.m2 tee ~/.m2/settings.xml <<-'EOF' <settings> <localRepository>/tmp/m2repo</localRepository> <mirrors> <mirror> <id>aliyunmaven</id> <mirrorOf>central</mirrorOf> <url>https://maven.aliyun.com/repository/public</url> </mirror> <mirror> <id>aliyun-spring</id> <mirrorOf>spring-plugin,spring-milestones,spring-snapshots</mirrorOf> <url>https://maven.aliyun.com/repository/spring</url> </mirror> </mirrors> </settings> EOF # 5. 执行 Maven 构建(用完整路径,确保能找到) echo "===== 开始 Maven 构建 =====" $M2_HOME/bin/mvn clean package -DskipTests -T 1C # 6. 构建 Docker 镜像 echo "===== 构建 Docker 镜像 =====" docker build -t cas-overlay-5.3.x-maven:latest .1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38运行 Docker 容器:
构建后操作 -> Send build artifacts over SSH -> Exec command
bash#!/bin/bash set -euo pipefail # 1. 定义正确的docker路径(验证结果:/usr/local/bin/docker) DOCKER_CMD="/usr/local/bin/docker" # 2. 调试日志(确认路径和权限) echo "=== 调试信息 ===" echo "Docker路径: $DOCKER_CMD" echo "当前用户: $(whoami),所属组: $(groups)" echo "本地镜像列表: " $DOCKER_CMD images | grep cas-overlay-5.3.x-maven || echo "未找到cas-overlay-5.3.x-maven镜像" # 3. 清理旧容器(无需sudo,权限已配置) echo "=== 清理旧容器 ===" $DOCKER_CMD stop cas-overlay-5.3.x-maven 2>/dev/null || echo "旧容器不存在,无需停止" $DOCKER_CMD rm cas-overlay-5.3.x-maven 2>/dev/null || echo "旧容器不存在,无需删除" # 4. 启动新容器 echo "=== 启动新容器 ===" $DOCKER_CMD run -d \ --name cas-overlay-5.3.x-maven \ --add-host=cas.bima.cc:192.168.1.30 \ -p 8443:8443 \ --restart=always \ cas-overlay-5.3.x-maven:latest # 5. 验证启动状态 echo "=== 容器启动状态 ===" $DOCKER_CMD ps | grep cas-overlay-5.3.x-maven || echo "容器启动失败,日志:$DOCKER_CMD logs cas-overlay-5.3.x-maven" echo "=== 操作完成 ==="1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
访问 CAS 服务
- CA地址:
https://服务器IP:8443/cas/login - 首次访问会提示证书警告,可忽略或添加信任(仅用于测试环境)
- 登录成功后,可在
/cas/logout路径注销会话
标准 OAuth 2.0 认证流程(示例)
配置三方应用
在 src/main/resources/services/ 目录下创建服务配置文件,例如 bima-cc-10001.json:
json
{
"@class": "org.apereo.cas.services.OidcRegisteredService",
"clientId": "oauth2-clientId-bima-web",
"clientSecret": "oauth2-clientSecret-bima-web",
"generateRefreshToken": true,
"scopes": [ "java.util.HashSet", [ "openid", "profile" ] ],
"serviceId": "^(http|https|imaps)://.*.bima.cc.*",
"name": "必码",
"id": 10001,
"evaluationOrder": 1,
"attributeReleasePolicy": {
"@class": "org.apereo.cas.services.ReturnAllowedAttributeReleasePolicy",
"allowedAttributes": [ "java.util.ArrayList", [ "id", "oauthClientId" ]
]
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1. 获取授权码(Authorization Code)
第三方应用重定向用户到 CAS 授权页面,用户登录并授权后,CAS 会返回授权码:
bash
# 重定向用户到授权页面
https://cas.bima.cc:8443/cas/oauth2.0/authorize?client_id=oauth2-clientId-bima-web&redirect_uri=https://abc.bima.cc&response_type=code1
2
2
2. 获取访问令牌(Access Token)
使用第一步获取的授权码,向 CAS 服务器请求访问令牌:
bash
# 使用授权码获取访问令牌
curl -k -X POST https://cas.bima.cc:8443/cas/oauth2.0/accessToken \
-d "client_id=oauth2-clientId-bima-web" \
-d "client_secret=oauth2-clientSecret-bima-web" \
-d "redirect_uri=https://abc.bima.cc" \
-d "code=OC-1-seh0KUJq6KLG-pNpt1Hqhf8rGNwTRVWo" \
-d "grant_type=authorization_code"1
2
3
4
5
6
7
2
3
4
5
6
7
3. 获取用户信息
使用访问令牌获取用户信息:
bash
# 使用访问令牌获取用户信息
https://cas.bima.cc:8443/cas/oauth2.0/profile?access_token=AT-1-KDezZINm7TO8bVtKk64OQ2WJW1kHJ0yu1
2
2
4. 刷新访问令牌
当访问令牌过期时,使用刷新令牌获取新的访问令牌:
bash
# 使用刷新令牌获取新的访问令牌
curl -k -X POST https://cas.bima.cc:8443/cas/oauth2.0/accessToken \
-d "grant_type=refresh_token" \
-d "client_id=oauth2-clientId-bima-web" \
-d "client_secret=oauth2-clientSecret-bima-web" \
-d "refresh_token=RT-1-E0-CFd62v8QL9ZMEFPlJtajtFH17Snda"1
2
3
4
5
6
2
3
4
5
6
标准 OIDC 认证流程(示例)
1. 获取授权码(Authorization Code)
第三方应用重定向用户到 CAS 授权页面,用户登录并授权后,CAS 会返回授权码:
bash
# 重定向用户到授权页面
https://cas.bima.cc:8443/cas/oidc/authorize?client_id=oauth2-clientId-bima-web&redirect_uri=https://abc.bima.cc&response_type=code&scope=openid1
2
2
2. 获取访问令牌(Access Token)
使用第一步获取的授权码,向 CAS 服务器请求访问令牌:
bash
# 使用授权码获取访问令牌
curl -k -X POST https://cas.bima.cc:8443/cas/oidc/token \
-d "client_id=oauth2-clientId-bima-web" \
-d "client_secret=oauth2-clientSecret-bima-web" \
-d "redirect_uri=https://abc.bima.cc" \
-d "code=OC-1-GBxP1WjK5nQ0nGAduE4i64-zma5vSAj6" \
-d "grant_type=authorization_code"1
2
3
4
5
6
7
2
3
4
5
6
7
3. 获取用户信息
使用访问令牌获取用户信息:
bash
# 使用访问令牌获取用户信息
https://cas.bima.cc:8443/cas/oidc/profile?access_token=AT-3-rp3-nsrs-3REwUBLeBJLjBEMoI650oxv1
2
2
4. 刷新访问令牌
当访问令牌过期时,使用刷新令牌获取新的访问令牌:
bash
# 使用刷新令牌获取新的访问令牌
curl -k -X POST https://cas.bima.cc:8443/cas/oidc/token \
-d "grant_type=refresh_token" \
-d "client_id=oauth2-clientId-bima-web" \
-d "client_secret=oauth2-clientSecret-bima-web" \
-d "refresh_token=RT-1-Qlm2yrBathZL3Ef3wDmtVqSqdXGYErtm"1
2
3
4
5
6
2
3
4
5
6
免责声明
本项目基于 GitHub 开源软件进行定制化开发,旨在为企业和开发者提供更便捷的项目基座解决方案。使用本项目时,请务必了解以下免责声明:
- 开源基础:本项目基于 GitHub 开源软件构建,遵循原开源协议的相关规定。
- 定制开发:我们对原开源软件进行了定制和扩展,以提供更优质的开发体验和功能支持。
- 责任限制:对于使用本项目可能产生的任何直接或间接的经济损失、数据丢失或其他问题,北京必码科技工作室不承担任何责任。
- 使用建议:在生产环境中使用本项目前,请进行充分的测试和验证,确保其符合您的业务需求和安全要求。
- 技术支持:我们提供技术支持服务,但不保证解决所有可能出现的问题。
- 合规使用:用户应确保在使用本项目时遵守相关法律法规和行业规范,不得用于任何违法或违规用途。