Skip to content

CAS Overlay 7.3.x Gradle 开发版

项目简介

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

CAS Overlay 7.3.x 登录界面

技术支持

核心改造

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:21
  • MySQL:8.0.33
  • Redis:7.2.4
  • LDAP:3.4.4
  • Gradle:9.1.0
  • Eclipse IDE(推荐)
  • Visual Studio Code(可能飘红,不影响编译和运行)
  • 构建过程需要访问 Maven 中央仓库,确保网络连接正常

数据库配置

1. 数据库初始化

本项目提供了完整的数据库初始化脚本,位于 src/main/resources/db_uc_20260113.sql。该脚本包含以下内容:

  • 基础认证表:包括 OAUTH_TOKENSSERVICETICKETTICKETGRANTINGTICKETTRANSIENTSESSIONTICKET 等 CAS 核心票据表
  • 用户管理表:包括 user_info 用户信息表,默认初始化了超级管理员账号
  • 业务系统表:包括 business_infobusiness_rolebusiness_permission 等业务系统管理表
  • 公司管理表:包括 company_infocompany_usercompany_permission 等公司管理表

初始化步骤

  1. 创建数据库:在 MySQL 数据库中创建名为 db_uc 的数据库
  2. 执行初始化脚本:使用 MySQL 客户端工具执行 db_uc_20260113.sql 脚本
  3. 验证初始化:确认所有表结构已创建,且 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&amp;allowMultiQueries=true&amp;characterEncoding=utf8"></property>
    <property name="username" value="root"></property>
    <property name="password" value="DS423PLUS-MySQL-1234567890!"></property>
</bean>

配置说明

  • driverClassName:数据库驱动类名,使用 MySQL 驱动
  • url:数据库连接地址,格式为 jdbc:mysql://主机:端口/数据库名?参数
  • username:数据库用户名
  • password:数据库密码
  • 连接池配置:包括初始连接数、最大连接数、最小空闲连接数等

修改步骤

  1. 打开 src/main/resources/spring-common.xml 文件
  2. 修改 urlusernamepassword 为实际的数据库连接信息
  3. 保存文件并重新构建项目

3. 默认管理员账号

初始化脚本中默认创建了超级管理员账号:

  • 用户名:admin
  • 密码:admin(密码已加密存储)

首次登录后,建议修改默认密码(cc.bima.cas.utils.Sha256Utils 使用main制作新的密码,注意盐值需要与数据库中的盐值一致)以提高安全性。

快速开始

方式一:开发者模式(以 Eclipse 工具为例)

  1. 适配 Gradle 环境

    bash
    # 清理 Gradle 缓存(可选)
    rm -rf ~/.gradle/caches/
    # 执行 Gradle 命令,生成 Eclipse 项目文件
    ./gradlew clean eclipse
  2. 导入项目

    • 在 Eclipse 中选择 File -> Import -> Gradle -> Existing Gradle Project
    • 选择项目根目录,点击 Finish 完成导入
  3. 启动服务

    • 找到并打开 cc.bima.cas.CasWebApplication 主启动类
    • 右键点击该类,选择 Debug As -> Java Application 启动服务
    • 服务启动后,可在控制台查看启动日志和调试信息

方式二:命令行模式(标准 Gradle 命令)

bash
# 构建项目(清理并编译)
./gradlew clean build

# 直接启动服务(开发测试)
./gradlew bootRun

# 打包为可执行 JAR 文件(生产部署)
./gradlew bootJar

方式三:Docker 容器模式(基于 Jenkins 构建)

  1. 构建 Docker 镜像

    Build Steps -> 执行 shell

    bash
    # (保留你原有的 Java 环境配置 + Gradle 构建命令)
    unset JAVA_HOME
    export JAVA_HOME=/opt/java/openjdk
    export PATH=/opt/java/openjdk/bin:$PATH
    
    cd /var/jenkins_home/workspace/cas-overlay-7.3-gradle-start
    ./gradlew clean bootJar
    
    echo ===== 构建 Docker 镜像 =====
    # 关键修改:镜像名改为 cas-overlay(和你启动容器时的镜像名一致)
    docker build -t cas-overlay-7.3.x-gradle:latest .
  2. 运行 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-7.3.x-gradle || echo "未找到cas-overlay-7.3.x-gradle镜像"
    
    # 3. 清理旧容器(无需sudo,权限已配置)
    echo "=== 清理旧容器 ==="
    $DOCKER_CMD stop cas-overlay-7.3.x-gradle 2>/dev/null || echo "旧容器不存在,无需停止"
    $DOCKER_CMD rm cas-overlay-7.3.x-gradle 2>/dev/null || echo "旧容器不存在,无需删除"
    
    # 4. 启动新容器(群晖端口映射兼容)
    echo "=== 启动新容器 ==="
    $DOCKER_CMD run -d \
    --name cas-overlay-7.3.x-gradle \
    -p 8443:8443 \
    --restart=always \
    cas-overlay-7.3.x-gradle:latest
    
    # 5. 验证启动状态
    echo "=== 容器启动状态 ==="
    $DOCKER_CMD ps | grep cas-overlay-7.3.x-gradle || echo "容器启动失败,日志:$DOCKER_CMD logs cas-overlay-7.3.x-gradle"
    
    echo "=== 操作完成 ==="

访问 CAS 服务

  • CAS 服务地址: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,
  "jwtAccessToken": true,
  "attributeReleasePolicy": {
    "@class": "org.apereo.cas.services.ReturnAllowedAttributeReleasePolicy",
    "allowedAttributes": [ "java.util.ArrayList", [ "id", "oauthClientId" ] ]
  }
}

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=code

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"

3. 获取用户信息

使用访问令牌获取用户信息:

bash
# 使用访问令牌获取用户信息
https://cas.bima.cc:8443/cas/oauth2.0/profile?access_token=AT-1-KDezZINm7TO8bVtKk64OQ2WJW1kHJ0yu

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"

标准 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=openid

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"

3. 获取用户信息

使用访问令牌获取用户信息:

bash
# 使用访问令牌获取用户信息
https://cas.bima.cc:8443/cas/oidc/profile?access_token=AT-3-rp3-nsrs-3REwUBLeBJLjBEMoI650oxv

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"

免责声明

本项目基于 GitHub 开源软件进行定制化开发,旨在为企业和开发者提供更便捷的项目基座解决方案。使用本项目时,请务必了解以下免责声明:

  1. 开源基础:本项目基于 GitHub 开源软件构建,遵循原开源协议的相关规定。
  2. 定制开发:我们对原开源软件进行了定制和扩展,以提供更优质的开发体验和功能支持。
  3. 责任限制:对于使用本项目可能产生的任何直接或间接的经济损失、数据丢失或其他问题,北京必码科技工作室不承担任何责任。
  4. 使用建议:在生产环境中使用本项目前,请进行充分的测试和验证,确保其符合您的业务需求和安全要求。
  5. 技术支持:我们提供技术支持服务,但不保证解决所有可能出现的问题。
  6. 合规使用:用户应确保在使用本项目时遵守相关法律法规和行业规范,不得用于任何违法或违规用途。