首页/新闻资讯/正文详情

Apereo CAS 认证事件 MongoDB 持久化指南:配置 `cas-server-support-events-mongo` 与事件仓库实现解析

发布时间:2026/9/23 19:59:15 来源:云帆数科 栏目:资讯中心
Apereo CAS 认证事件 MongoDB 持久化指南:配置 `cas-server-support-events-mongo` 与事件仓库实现解析
后端认证鉴权单点登录【免费下载链接】casApereo CAS - Identity Single Sign On for all earthlings and beyond.项目地址https://gitcode.com/gh_mirrors/ca/cas点击查看免费下载Apereo CAS 将认证过程中产生的各类事件登录成功、登录失败、票据创建等封装为统一的事件模型并交由事件仓库CasEventRepository持久化。当事件仓库后端选用 MongoDB 时认证事件会被写入 MongoDB 的指定集合中供审计、监控、事件报表与风险分析使用。读完本文你将掌握如何通过cas-server-support-events-mongo模块启用该能力、完整配置 MongoDB 连接与集合参数并理解事件从产生、落库到被events管理端点查询的底层实现链路。一、模块概述与启用方式MongoDb 认证事件持久化由独立模块 cas-server-support-events-mongo 提供其核心作用正如官方文档所述将认证事件存储到 MongoDB NoSQL 数据库中Stores authentication events into a MongoDb NoSQL database。启用方式是在 CAS 构建配置Gradle 依赖管理中加入该模块坐标信息如下依赖模块cas-server-support-events-mongo 组织org.apereo.cas加入依赖后CAS 会自动装配 CasMongoDbEventsAutoConfiguration 中定义的三个核心 BeanBean 名称类型职责persistenceExceptionTranslationPostProcessorPersistenceExceptionTranslationPostProcessor将 MongoDB 数据访问异常转换为 Spring 持久化异常体系mongoEventsTemplateMongoTemplate面向事件集合的 MongoDB 操作模板负责建集合与读写casEventRepositoryCasEventRepository事件仓库实现MongoDbCasEventRepository供 CAS 全局事件发布与消费使用该自动配置类同时具备两个重要的装配前提通过ConditionalOnFeatureEnabled(feature CasFeatureModule.FeatureCatalog.Events, module mongo)限定只有 CAS 的Events 功能特性与mongo 模块特性均被启用时才生效。该特性开关通常由cas.feature-flags相关配置或模块自动推导控制。mongoEventsTemplate与mongoEventRepositoryFilter均标注ConditionalOnMissingBean意味着开发者可以覆盖这些 Bean自定义连接模板或事件过滤策略。casEventRepository通过Qualifier(mongoEventsTemplate)注入 MongoDB 模板通过Qualifier(mongoEventRepositoryFilter)注入事件过滤器。1.1 从源码看事件入库链路在 MongoDbCasEventRepository 中事件写入与查询全部基于 Spring Data MongoDB 的MongoOperations写入saveInternal(CasEvent event)调用mongoTemplate.save(event.assignIdIfNecessary(), collectionName)先为事件分配 ID若未设置则取System.currentTimeMillis()见 CasEvent.assignIdIfNecessary再写入指定集合。清空removeAll()使用mongoTemplate.remove(new Query(), CasEvent.class, collectionName)删除集合内全部事件。读取load()使用mongoTemplate.stream(...)以流式方式读取全部事件load(ZonedDateTime)则在查询条件中追加creationTime dateTime.toInstant()的时间过滤。二、配置参数详解cas.events.mongo.*模块的全部配置项统一挂在cas.events.mongo前缀之下对应的配置模型是 MongoDbEventsProperties它继承自SingleCollectionMongoDbProperties与BaseMongoDbProperties。注意该属性类上的RequiresModule(name cas-server-support-events-mongo)注解未引入对应模块时这些配置不会生效。2.1 集合相关配置配置项默认值说明cas.events.mongo.collectionMongoDbCasEventRepositoryMongoDB 中存放认证事件的集合名称。构造函数中通过setCollection(MongoDbCasEventRepository)预置可覆盖cas.events.mongo.drop-collectionfalse启动时是否先删除drop再重新创建集合。测试场景或需要清空历史数据时设为true集合的创建发生在 CasMongoDbEventsAutoConfiguration#mongoEventsTemplateMongoDbConnectionFactory.createCollection(mongoTemplate, mongo.getCollection(), mongo.isDropCollection())会在应用启动装配模板时按需创建集合。2.2 连接相关配置以下参数定义在 BaseMongoDbProperties 中是 MongoDB 连接的基础设置配置项默认值说明cas.events.mongo.client-uri空MongoDB 连接 URI形如mongodb://user:pswds135522.somewhere.com:35522/db。一旦指定将接管其他连接设置优先级最高cas.events.mongo.hostlocalhostMongoDB 主机地址。多个地址用逗号分隔若每个主机都自带端口则端口以此为准cas.events.mongo.port27017MongoDB 端口cas.events.mongo.user-id空MongoDB 认证用户名cas.events.mongo.password空MongoDB 认证密码cas.events.mongo.database-name空MongoDB 数据库实例名事件写入的目标数据库cas.events.mongo.authentication-database-name空用于认证的数据库名称cas.events.mongo.timeoutPT5S连接超时ISO-8601 时长格式如PT5S表示 5 秒cas.events.mongo.write-concernACKNOWLEDGED写关注级别描述 MongoDB 对写操作要求确认的程度cas.events.mongo.read-concernAVAILABLE读关注级别可选LOCAL、MAJORITY、LINEARIZABLE、SNAPSHOT、AVAILABLEcas.events.mongo.read-preferencePRIMARY读偏好可选PRIMARY、SECONDARY、SECONDARY_PREFERRED、PRIMARY_PREFERRED、NEARESTcas.events.mongo.retry-writesfalse写操作因网络错误失败时是否自动重试cas.events.mongo.ssl-enabledfalse连接是否启用 SSLcas.events.mongo.replica-set空副本集名称。副本集提供冗余与高可用是生产部署的基础此外连接池相关参数由嵌套属性cas.events.mongo.pool.*提供MongoDbConnectionPoolProperties用于控制连接池大小、等待时间等。2.3 完整配置示例YAMLcas: events: mongo: client-uri: mongodb://cas:secretmongodb.example.org:27017/cas-events # 或使用分散参数 # host: localhost # port: 27017 # user-id: cas # password: secret # authentication-database-name: admin database-name: events collection: MongoDbCasEventRepository drop-collection: false timeout: PT5S write-concern: ACKNOWLEDGED read-concern: AVAILABLE read-preference: PRIMARY retry-writes: false ssl-enabled: false以上配置与仓库测试用例 MongoDbCasEventRepositoryTests 中使用的参数一一对应可作为最小可运行配置的参考cas.events.mongo.user-idroot cas.events.mongo.passwordsecret cas.events.mongo.hostlocalhost cas.events.mongo.port27017 cas.events.mongo.authentication-database-nameadmin cas.events.mongo.database-nameevents cas.events.mongo.drop-collectiontrue测试类还标注了EnabledIfListeningOnPort(port 27017)即只有在本地27017端口存在 MongoDB 实例时才会执行这提示了该功能的运行前置条件必须有一个可连接的 MongoDB 实例。三、事件数据模型MongoDB 集合中的文档结构写入 MongoDB 的事件文档对应 CasEvent 实体位于api/cas-server-core-api-events模块其字段结构如下JSON 字段类型说明idlong事件唯一标识写入时若小于等于 0 则以System.currentTimeMillis()填充typeString事件类型如CasAuthenticationTransactionSuccessfulEvent、CasAuthenticationTransactionFailureEvent等非空principalIdString与该事件关联的用户主体 ID非空creationTimeInstant事件创建时间非空propertiesMapString, String事件扩展属性键值对单值最长 4000 字符properties映射中常见的语义字段通过常量定义timestamp事件时间戳毫秒eventId事件 IDclientip/serverip客户端 / 服务端 IPagent用户代理浏览器/设备信息tenant多租户场景下的租户标识geoLatitude、geoLongitude、geoAccuracy、geoTimestamp、geoAddress地理位置相关putGeoLocation统一写入deviceFingerprint设备指纹。这些扩展属性通过put(...)链式方法写入空值会被移除事件创建方如认证成功/失败监听器在发布事件前会填充 IP、Agent、地理位置等信息MongoDB 仓库会将这些字段原样保存在文档的properties内嵌对象中。3.1 查询字段与索引语义MongoDbCasEventRepository 在查询时使用以下三个顶层字段构造CriteriacreationTime时间范围过滤gte(dateTime.toInstant())type事件类型精确匹配principalId主体 ID 精确匹配。仓库提供了 8 种查询组合按类型、按主体、按时间及其任意组合全部返回Stream? extends CasEvent流式结果。若需要在大数据量下保证查询性能可以考虑在 MongoDB 中为creationTime、type、principalId建立合适的索引。值得注意的是基类 AbstractCasEventRepository 中带时间参数的查询默认采用内存过滤load().filter(...)而 MongoDB 实现则全部下推到数据库端执行见MongoDbCasEventRepository中对load(ZonedDateTime)、getEventsOfType(type, dateTime)等方法的覆写因此在大数据量场景下 MongoDB 后端的查询效率更高。四、保存流程从事件发布到落库CAS 的认证事件遵循发布-订阅模型。事件被发布后casEventRepository的save(...)方法被调用其流程定义在 AbstractCasEventRepository#save 中调用eventRepositoryFilter.shouldSaveEvent(event)判断该事件是否需要持久化默认过滤器为noOp()即全部保存见 CasMongoDbEventsAutoConfiguration#mongoEventRepositoryFilter通过则调用子类实现的saveInternal(event)即MongoDbCasEventRepository.saveInternal将事件保存进 MongoDB 集合保存成功后若配置了ApplicationEventPublisher还会额外发布一个 Spring Boot Actuator 的AuditApplicationEvent审计事件其属性中包含CasEventRepository.PARAM_SOURCE CAS从而与 CAS 的审计机制打通。五、通过 Actuator 端点查询与管理事件认证事件持久化到 MongoDB 后可通过 CAS 的 Actuator 管理端点events进行查询与管理该端点定义在 CasEventsReportEndpoint 中端点 ID 为events默认访问权限为Access.NONE需显式开放GET /actuator/events?limit1000以 JSON 数组形式返回事件列表按timestamp倒序排列默认最多 1000 条GET /actuator/events/aggregate以 NDJSON 流式返回聚合事件报表DELETE /actuator/events清空事件仓库对应MongoDbCasEventRepository.removeAll()POST /actuator/events导入单个事件请求体为CasEventJSON或上传 ZIP 压缩包包内为多个.json事件文件批量导入。通过该端点可以直观验证 MongoDB 后端是否正常工作写入几条认证事件后访问GET /actuator/events应能看到来自 MongoDB 集合的完整事件数据。六、快速验证与测试仓库自带的集成测试 MongoDbCasEventRepositoryTests 继承自AbstractCasEventRepositoryTests覆盖了事件保存、按类型/主体/时间查询、清空等全部仓库接口行为。若要在本地复现需要在localhost:27017启动 MongoDB 实例测试通过EnabledIfListeningOnPort(port 27017)检测端口准备测试库events及认证账号测试用例使用root/secret认证库admin运行该测试类观察CasMongoDbEventsAutoConfiguration的装配与增删查改流程。该测试同时验证了drop-collectiontrue的行为每次启动都会先 drop 集合再重建适用于开发调试生产环境建议保持false避免启动时误清历史事件数据。七、小结与使用建议模块先行使用前必须在构建中引入cas-server-support-events-mongo否则cas.events.mongo.*配置不会生效连接配置推荐直接使用client-uri完成连接其余参数作为精细化兜底database-name决定事件写入哪个库collection决定写入哪个集合默认MongoDbCasEventRepository生产建议保持drop-collection: false按type、principalId、creationTime的查询模式为集合建立索引结合eventsActuator 端点做日常巡检生态定位该模块是 CAS 事件仓库的 MongoDB 后端实现之一与 JDBC、Redis、DynamoDb、Kafka 等后端实现并列见 api/cas-server-core-api-configuration-model/src/main/java/org/apereo/cas/configuration/model/core/events 下的事件配置模型选择 MongoDB 可获得 NoSQL 的灵活文档结构与流式读取能力适合与现有 MongoDB 基础设施复用的部署场景。赞分享后端认证鉴权单点登录【免费下载链接】casApereo CAS - Identity Single Sign On for all earthlings and beyond.项目地址https://gitcode.com/gh_mirrors/ca/cas点击查看免费下载相关推荐Apereo CAS 认证事件 Kafka 发布指南使用 cas-server-support-events-kafka 将认证事件写入 Kafka TopicApereo CAS 认证事件 Kafka 发布指南使用 cas server support events kafka 将认证事件写入 Kafka Topi后端认证鉴权单点登录gh_mirrors/cas/cas与GitLab集成代码仓库的SSO认证实现终极指南gh_mirrors/cas/cas与GitLab集成代码仓库的SSO认证实现终极指南 在当今企业级开发环境中 统一身份认证 已成为提升开发效率和保障代码安后端认证鉴权单点登录Apereo CAS集成Google Authenticator实现多因素认证指南Apereo CAS集成Google Authenticator实现多因素认证指南 概述 在当今网络安全环境中多因素认证 MFA 已成为保护敏感系统的必备措施后端认证鉴权单点登录上一篇EvoDiff高级技巧如何通过条件MSA生成新的蛋白质家族成员下一篇Udeler代码注释规范提升团队协作效率的文档实践创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

ISO 3166-1 国家代码速查表:二位/三位/数字代码与中英文名称对照(jaywcjlove/reference 实践指南)
ISO 3166-1 国家代码速查表:二位/三位/数字代码与中英文名称对照(jaywcjlove/reference 实践指南)

文档知识库教程开发工具 【免费下载链接】reference 为开发人员分享快速参考备忘清单(速查表) 项目地址: https://gitcode.com/jaywcjlove/reference 点击查看 免费下载 本文整理自 jaywcjlove/reference 仓库中的 ISO 3166-1 国家代码备忘清单。ISO 3166-1 是国际… · 2026/9/23 19:59:09

3招搞定2026最新网络安全监测装置性能瓶颈
3招搞定2026最新网络安全监测装置性能瓶颈

3招搞定2026最新网络安全监测装置性能瓶颈 版本升级后 API 全变了,你的监测装置还在裸奔?别急着骂人,这是 2026 最新技术栈落地的阵痛期。很多团队发现,原本跑得飞起的流量分析模块,换了个 SDK 直接卡死,CPU 飙到… · 2026/9/23 19:59:08

搞定江西赣州地图源码,5道高频面试题吃透底层逻辑
搞定江西赣州地图源码,5道高频面试题吃透底层逻辑

搞定江西赣州地图源码,5道高频面试题吃透底层逻辑 刚入行的后端开发,是不是经常遇到这种尴尬?Python的 for 循环写得滚瓜烂熟,SQL的 JOIN… · 2026/9/23 19:58:54

关键词库入门到精通
关键词库入门到精通

这里存在一个严重的逻辑冲突,我需要先向您指出: 您的指令中包含了互相矛盾的要求: 角色与背景 :您要求我是“编程领域资深从业者”,文章背景是“编程开发技术博客”,关键词是“【关键词库】”(这是一个占位符,未指定具体编程语言或技术,如… · 2026/9/23 20:41:06

WAS8.5静默安装实战:imcl命令与节点联邦配置全解析
WAS8.5静默安装实战:imcl命令与节点联邦配置全解析

简介:面向WebSphere Application Server运维与实施人员的WAS 8.5静默安装及补丁升级完整步骤文档,覆盖Linux环境下安装包准备、目录结构规划、Installation Manager与WAS 8.5.5静默安装、管理概要与应用概要创建、Web管理控制台启动、Node节点配置&#… · 2026/9/23 20:41:00

ramsey/uuid 安全漏洞披露政策(VDP)全解析:Scope 范围、Safe Harbor 条款与 PGP 加密上报流程
ramsey/uuid 安全漏洞披露政策(VDP)全解析:Scope 范围、Safe Harbor 条款与 PGP 加密上报流程

ramsey/uuid 安全漏洞披露政策(VDP)全解析:Scope 范围、Safe Harbor 条款与 PGP 加密上报流程 【免费下载链接】uuid :snowflake: A PHP library for generating universally unique identifiers (UUIDs). 项目地址: https://gitcode.com/g… · 2026/9/23 20:41:00

AI生成代码安全审查:三条信任边界与实操方法
AI生成代码安全审查:三条信任边界与实操方法

1. 为什么“看代码对不对”在 AI 生成场景下已经不够用了过去几年我参与过不少代码审查,传统模式下大家习惯盯的是语法、逻辑、边界条件、异常处理这些点。但自从团队开始大规模用 AI 辅助生成代码之后,我发现一个很明显的转变:代码本身“看起… · 2026/9/23 20:40:53

技术分享:GBase 8s数据库启动服务基础说明
技术分享:GBase 8s数据库启动服务基础说明

南大通用GBase 8s数据库(gbase database)服务器启动基础说明完成 GBase 8s安装与基础配置后,还有一系列基础运维任务需要落地,包含准备应用连接、启动数据库、初始化磁盘空间、创建存储空间,配置备份恢复以及日常管理维… · 2026/9/23 20:40:53

Surface Duo刷机教程:fastboot与EDL救砖全流程详解
Surface Duo刷机教程:fastboot与EDL救砖全流程详解

简介:面向不熟悉官方文档、希望给微软Surface Duo刷机却无从下手的普通用户,这份教程用口语化讲解替代复杂术语,把“小白”最常卡住的环节拆开说明。内容没有停留在转载官方步骤,而是围绕真实操作补足了细节:刷机前如何… · 2026/9/23 20:40:46

3招搞定手机怎么下载微信面试难题实战项目解析
3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧
Win7无线热点配置工具源码解析:解决API失效的3个实战技巧

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧 Win7无线热点配置工具在Win10/11上跑不动?不是你的问题,是版本升级后 API 全变了。很多老项目里的 netsh wlan… · 2026/9/23 0:00:36

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码