Skip to content

CAS Overlay 7.3.x Gradle 开发版

项目简介

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

CAS Overlay 7.3.x 登录界面

技术支持

核心改造

CAS-Overlay 企业级定制开发版

专为企业级身份认证场景深度二次开发,彻底重构原生 CAS 架构,开箱即用、零门槛适配企业各类账号体系,完美支撑微服务、分布式、容器化部署需求,解决原生 CAS 部署配置复杂、调试困难等核心痛点。

核心二次开发功能:

  • 01:架构现代化升级 — 摒弃传统 WAR 包架构,全面转型 Spring Boot 标准 JAR 包架构,部署流程极简优化,原生适配微服务生态与 Docker / K8s 容器化部署,兼容企业现代化运维体系。
  • 02:双源认证全覆盖 / JDBC + LDAP — 集成 MyBatis 数据库访问框架,支持 JDBC 数据库账号认证 + LDAP 目录服务双认证模式,无缝对接企业现有账号存储方案,无需改造原有账号体系,满足内网、混合架构等全场景身份校验需求。
  • 03:本地开发零障碍 / 自定义启动类 — 提供专属 CasWebApplication 主启动类,支持本地直接 Debug 启动、断点调试,告别原生 CAS 复杂启动配置,大幅提升开发调试效率。
  • 04:灵活自定义认证逻辑 / 图形验证码 — 摒弃原生固定校验规则,支持自定义用户名 / 密码校验逻辑(JDBC 模式),基于 Redis 的前置校验图形验证码功能。可按需再扩展多因子校验、账号状态等个性化校验规则。
  • 05:双协议认证 / 任意自定义返回值 — 同时支持 OAuth2.0 + OIDC 双标准认证协议,兼容各类第三方应用对接需求;支持自定义认证返回值,可灵活输出用户详情、角色权限、部门信息等任意自定义业务数据。
  • 06:双协议反向代理适配 / HTTP + HTTPS 全兼容 — 支持 HTTP、HTTPS 双协议反向代理,适配主流网关,自动适配代理请求信息,无需额外改造,满足内外网访问及安全传输需求。
  • 07:JWT AccessToken 支持 / 自定义属性扩展 — 全面支持 JWT 格式 AccessToken,支持在 AccessToken 中添加自定义用户属性(如用户 ID、昵称、手机号、邮箱等)任意自定义业务数据,满足企业个性化身份信息传递需求。
  • 08:分布式集群部署 / 高可用支撑 — 基于 Redis 实现 Ticket 集中存储,支持多节点分布式集群部署,无状态设计保障系统高可用性、横向扩展性,满足企业高并发访问场景。
  • 09:全量前端资源开放 / 可视化定制 — 完整提取前端静态资源、页面模板,无加密、无限制,支持开发者根据企业品牌自由定制登录页、首页、错误页等前端界面。
  • 10:国际化多语言支持 — 内置中文、英文等多语言配置,满足企业国际化业务、跨区域使用需求。(示例)
  • 11:容器化 / 自动化部署 — 内置标准化 Dockerfile 与 Jenkins 部署脚本,一键完成容器打包、自动化部署,无缝接入企业 CI / CD 持续集成流程。

环境要求

  • JDK:21
  • MySQL:8.x(默认端口 3306)
  • Redis:7.x(默认端口 6379)
  • LDAP:可选(默认端口 389)
  • Gradle:项目自带 Gradle Wrapper 9.1.0
  • VS Code(推荐)
  • 构建过程需要访问 Maven 中央仓库,确保网络连接正常

数据库配置

1. 数据库初始化

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

  • 用户管理表:包括 user_info 用户信息表,默认初始化了超级管理员账号

初始化步骤

  1. 创建数据库:在 MySQL 数据库中创建名为 user_center 的数据库
  2. 执行初始化脚本:在 user_center 数据库中执行 user_center.sql 脚本
  3. 验证初始化:确认所有表结构已创建,且 user_info 表中包含默认的超级管理员账号

2. 数据库连接配置

数据库连接配置位于 src/main/resources/spring-common.xml 文件中,主要配置项如下:

xml
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"
      destroy-method="close">
    <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
    <!-- 将下面数据库配置替换为自己的 -->
    <property name="url"
              value="${BIMA_DB_URL:jdbc:mysql://nas.bima.cc:3306/user_center?useUnicode=true&amp;characterEncoding=utf8&amp;useSSL=false&amp;allowPublicKeyRetrieval=true&amp;serverTimezone=Asia/Shanghai}"/>
    <property name="username" value="${BIMA_DB_USERNAME:demo}"/>
    <property name="password" value="${BIMA_DB_PASSWORD:数据库密码}"/>
</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.encrypt 生成新的密码散列,注意盐值需要与数据库中的盐值一致)以提高安全性。

快速开始

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

  1. 导入项目

    • 在 VS Code 中打开项目根目录
    • 等待项目依赖下载完成
  2. 启动服务

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

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

bash
# 构建与校验
./gradlew clean test

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

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

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

项目根目录已提供 DockerfileJenkinsfile,Docker 与 Jenkins 构建均使用项目自带的 Wrapper。构建产物为 build/libs/cas.jar

  1. 构建 Docker 镜像

    bash
    docker build -t cas-overlay-7.3.x-gradle:latest .
  2. 运行 Docker 容器

    bash
    #!/bin/bash
    set -euo pipefail
    
    DOCKER_CMD="docker"
    
    # 清理旧容器
    $DOCKER_CMD stop cas-overlay-7.3.x-gradle 2>/dev/null || true
    $DOCKER_CMD rm cas-overlay-7.3.x-gradle 2>/dev/null || true
    
    # 启动新容器
    $DOCKER_CMD run -d \
      --name cas-overlay-7.3.x-gradle \
      -p 8080:8080 \
      -p 8443:8443 \
      --restart=always \
      cas-overlay-7.3.x-gradle:latest
    
    # 验证启动状态
    $DOCKER_CMD ps | grep cas-overlay-7.3.x-gradle || $DOCKER_CMD logs cas-overlay-7.3.x-gradle

访问 CAS 服务(适配反向代理)

  • CAS 服务地址:https://cas.bima.cc: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,
  "supportedGrantTypes": [ "java.util.HashSet", [ "authorization_code", "refresh_token" ] ],
  "supportedResponseTypes": [ "java.util.HashSet", [ "code" ] ],
  "scopes": [ "java.util.HashSet", [ "openid", "profile", "email" ] ],
  "serviceId": "^(http|https|imaps)://.*.bima.cc.*",
  "name": "必码",
  "id": 10001,
  "evaluationOrder": 1,
  "jwtAccessToken": true,
  "signIdToken": true,
  "jwks": "classpath:keystore.jwks",
  "logoutUrl": "https://abc.bima.cc/logout",
  "subjectType": "public",
  "tokenEndpointAuthenticationMethod": "client_secret_post",
  "attributeReleasePolicy": {
    "@class": "org.apereo.cas.services.ReturnAllowedAttributeReleasePolicy",
    "allowedAttributes": [ "java.util.ArrayList", [ "id", "oauthClientId", "userId", "userName", "userNickName", "userTelphone", "userEmail" ] ]
  }
}

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=<authorization_code>" \
-d "grant_type=authorization_code"

3. 获取用户信息

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

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

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=<refresh_token>"

标准 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=<authorization_code>" \
-d "grant_type=authorization_code"

3. 获取用户信息

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

bash
# 使用访问令牌获取用户信息
https://cas.bima.cc:8443/cas/oidc/profile?access_token=<access_token>

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=<refresh_token>"

免责声明

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

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