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

CAS 属性释放策略之模式匹配(Pattern Matching):用正则提取与 Groovy 变换重组释放属性

发布时间:2026/9/27 7:28:29 来源:云帆数科 栏目:资讯中心
CAS 属性释放策略之模式匹配(Pattern Matching):用正则提取与 Groovy 变换重组释放属性
后端认证鉴权单点登录【免费下载链接】casApereo CAS - Identity Single Sign On for all earthlings and beyond.项目地址https://gitcode.com/gh_mirrors/ca/cas点击查看免费下载导读在 Apereo CAS 中属性释放策略Attribute Release Policy决定了一个已注册服务Registered Service能够拿到主体的哪些属性、以及这些属性以什么形态出现在最终票据/令牌中。PatternMatchingAttributeReleasePolicy是其中一类有条件 可变换的策略只有当属性值命中给定的正则表达式时才允许释放并可在命中后对匹配组进行重组或交给内联 Groovy 脚本做任意转换。本文以官方文档 Attribute-Release-Policy-PatternMatching.md 为骨架结合仓库中 PatternMatchingAttributeReleasePolicy.java 的源码实现与 PatternMatchingAttributeReleasePolicyTests.java 的测试用例完整讲解两种变换模式、JSON 服务定义写法、脚本参数与返回值约束以及底层匹配与归一化逻辑。读完本文你将能够直接在自己的 CAS 服务注册 JSON 中落地这类策略。策略概述先匹配、后变换PatternMatchingAttributeReleasePolicy只释放allowedAttributes中列出的属性且每个属性都绑定一条规则Rulepattern作用于该属性每个值的正则表达式transform命中后的变换规则既可以是按匹配组重组的模板字符串也可以是内联 Groovy 脚本。只有值成功匹配正则策略才会对该值执行变换并收集结果未匹配的值不会进入释放结果。该策略自 CAS6.6.0引入见源码类注释类定义位于 PatternMatchingAttributeReleasePolicy.java。从源码结构看策略内部的核心数据结构是MapString, Rule allowedAttributes而Rule是一个仅包含pattern与transform两个字符串字段的静态内部类源码 L202-L209与官方文档中的 JSON 结构一一对应。CAS 还通过 CasCoreServicesComponentSerializationConfiguration.java 将PatternMatchingAttributeReleasePolicy及其内部Rule注册进组件序列化计划因此它可以在 JSON 服务注册中心、JPA 服务注册等场景中可靠地序列化与反序列化。变换模式一模式提取Pattern Extraction考虑一个认证后的主体带有memberOf属性其值形如CNg1,OUexample,DCorg与CNg2,OUexample,DCorg。我们希望对每个值应用正则并重组匹配组最终得到memberOf属性值为g1example.org与g2example.org。官方文档给出了如下完整 JSON 服务定义{ class : org.apereo.cas.services.CasRegisteredService, serviceId : ..., name : sample, id : 300, attributeReleasePolicy : { class: org.apereo.cas.services.PatternMatchingAttributeReleasePolicy, allowedAttributes: { class: java.util.TreeMap, memberOf: { class: org.apereo.cas.services.PatternMatchingAttributeReleasePolicy$Rule, pattern: ^CN(\\w),\\s*OU(\\w),\\s*DC(\\w), transform: ${1}${2}/${3} } } } }要点说明allowedAttributes声明为java.util.TreeMap键是待匹配的原始属性名值是PatternMatchingAttributeReleasePolicy$Rulepattern使用 Java 正则语法^CN(\w),\s*OU(\w),\s*DC(\w)把CN、OU、DC三个部分分别捕获为组 1、2、3transform中的${1}、${2}、${3}在值命中后被替换为对应匹配组内容生成新值。匹配组的编号约定匹配组通常从1开始计数如果需要引用整个被匹配区域使用${0}。这一约定与源码中PATTERN_TRANSFORM_GROUPS RegexUtils.createPattern(\\$\\{(\\d)\\})的解析方式一致源码 L46即只要在transform中出现${数字}就会被替换为对应组内容。底层替换逻辑在非脚本分支中源码通过buildAttributesForEntry完成替换源码 L168-L192对原始属性的每个值调用valuePattern.matcher(value.toString())若matcher.find()命中则用PATTERN_TRANSFORM_GROUPS扫描transform模板中的每个${n}把matcher.group(n)替换回模板所有替换完成后过滤掉空白值作为该属性名下的新值集合返回。因此transform可以任意组合匹配组如${1}${2}/${3}也可以整体引用${0}例如测试用例verifyTransformEntireMatch中使用${0}/org在整段匹配值后追加/org见 PatternMatchingAttributeReleasePolicyTests.java L82-L103。测试验证官方测试 verifyPatternTransform 使用与文档完全相同的pattern与transform断言释放结果包含memberOf且值为g1example/org、g2example/org测试用${2}/${3}组织OU/DC部分未在allowedAttributes中列出的属性如another不会被释放。这印证了策略白名单 正则门控的双重约束属性必须先在allowedAttributes中列出其值还必须匹配pattern。变换模式二内联 Groovy 脚本除了模板字符串替换transform还可以直接内联一段 Groovy 脚本。官方文档给出的示例如下对同一memberOf属性应用正则.*CN(\w),OUexample.*并按组值做自定义映射{ class : org.apereo.cas.services.CasRegisteredService, serviceId : ..., name : sample, id : 300, attributeReleasePolicy : { class: org.apereo.cas.services.PatternMatchingAttributeReleasePolicy, allowedAttributes: { class: java.util.TreeMap, memberOf: { class: org.apereo.cas.services.PatternMatchingAttributeReleasePolicy$Rule, pattern: .*CN(\\w),OUexample.*, transform: groovy { logger.info(Full matched value is ${matched}) def value matchedGroup1 g1 ? group1 : group2 // return a Map of attribute names to values return [mem: [value]] } } } } }上述配置下最终释放的属性为mem值为group1与group2——脚本可以自由决定输出哪些属性名、哪些值这正是脚本模式相比模板模式更强大的地方它能够把一种源属性映射为任意目标属性集合。脚本返回值约定官方文档明确了脚本的返回契约源码normalizeTransformationResult源码 L149-L166在实现层面做了严格归一化脚本必须返回一个Map属性名 → 值单个值会被包装为单元素集合后释放没有属性名、或没有任何值的条目会被直接忽略多条规则返回相同属性名时它们的值会被合并而不是互相覆盖。返回null或空 Map 时该规则的释放结果为空不影响其他属性。对应测试 verifyGroovyTransformationRuleReturningSingleValues 验证了单值 → 单元素集合的包装行为verifyGroovyTransformationRuleReturningUnusableEntries 验证了[mem: null, : [g0], other: []]这类无用条目会被丢弃verifyGroovyTransformationRulesCombineIntoSameAttribute 则验证了来自不同源属性的规则映射到同一目标属性时值会合并。脚本可用参数官方文档给出的脚本参数表如下参数描述attributesMap当前已解析、可用于释放的属性集合。logger负责输出日志的对象例如logger.info(...)。context属性释放策略上下文对象携带service、principal等。matched完整匹配到的值。matchedGroup0与matched相同。matchedGroupX匹配组X为组序号仅在模式使用分组时存在。这些绑定由源码executeTransformationRule注入源码 L119-L140脚本执行前CAS 先用matcher.find()判断当前值是否命中命中后才把context、attributes、matched、logger以及matchedGroup0到matchedGroupNN 为matcher.groupCount()逐一装入脚本绑定再执行脚本。值得注意的是测试用例还演示了通过context.principal.id在脚本中访问当前主体标识PatternMatchingAttributeReleasePolicyTests.java L113。脚本的编译与缓存在脚本模式下CAS 通过ExecutableCompiledScriptFactory识别内联脚本并经ScriptResourceCacheManager缓存已编译的脚本资源源码 L96-L100。测试 verifyGroovyTransformationRuleIsCompiledOnce 明确断言同一变换脚本只编译一次后续请求直接从脚本缓存中取用同一个编译实例。也就是说在高并发属性释放场景下Groovy 变换不会反复产生编译开销。在原生镜像Native Image环境下源码会跳过脚本分支CasRuntimeHintsRegistrar.notInNativeImage()判断见 源码 L74因此内联 Groovy 变换仅适用于常规 JVM 运行形态。启用 Groovy 支持若要使用内联 Groovy 变换需要确保 CAS 运行环境已集成并支持 Apache Groovy。官方文档指向了 Groovy 集成指南请参考 Apache Groovy 脚本集成指南 完成相关依赖与配置准备。规则缺失变换时的行为如果某条Rule只配置了pattern而没有transform该规则不会生效。源码在getAttributesInternal的过滤阶段即做了检查源码 L65-L71if (StringUtils.isBlank(entry.getValue().getTransform())) { LOGGER.warn(No transformation rule is defined for attribute [{}]; the rule is ignored., entry.getKey()); return false; }对应测试 verifyRuleWithoutTransformationIsIgnored 验证仅有 pattern 而无 transform 的规则被忽略释放结果为空且不抛异常。因此在实际配置时transform是必填项——无论是模板字符串还是内联 Groovy 脚本。策略的组装与执行位置PatternMatchingAttributeReleasePolicy继承自 AbstractRegisteredServiceAttributeReleasePolicy.java其getAttributesInternal只负责选出并变换属性而父类getAttributes负责完整的释放流程解析主体属性仓库 → 经属性定义存储解析 → 调用策略获得policyAttributes→ 合并默认释放属性 → 追加主标识属性 → 执行后置处理器 → 应用可选的属性过滤器attributeFilter。因此该策略也可以与其他释放策略如ChainingAttributeReleasePolicy串联使用或在其上挂载正则/脚本属性过滤器做二次裁剪。对属性值的大小写规范化canonicalizationMode与默认属性cas.authn.attributeRepository.core.defaultAttributesToRelease等公共行为均由父类统一处理模式匹配策略无需重复实现AbstractRegisteredServiceAttributeReleasePolicy.java L267-L286。配置落地要点服务定义将attributeReleasePolicy节点加入对应CasRegisteredService的 JSON或 YAML/管理界面定义中class必须写全类名org.apereo.cas.services.PatternMatchingAttributeReleasePolicy规则类型为org.apereo.cas.services.PatternMatchingAttributeReleasePolicy$Rule。正则书写pattern使用 Java 正则语法在 JSON 中书写\w、\s等转义时需要写成\\w、\\s注意使用分组捕获需要替换的内容。模板变换transform中${1}、${2}等对应匹配组${0}表示整段匹配组号从 1 开始。脚本变换transform以groovy { ... }包裹必须返回属性名 → 值的 Map充分利用matched、matchedGroupX、attributes、context、logger五个绑定脚本只编译一次并被缓存。未命中即不释放某个值没有匹配pattern时该值既不进入释放结果也不抛错未列入allowedAttributes的属性一律不释放。Groovy 依赖使用脚本模式前请确认已按 Apache Groovy 脚本集成指南 完成 Groovy 支持配置。小结PatternMatchingAttributeReleasePolicy为 CAS 的属性释放提供了一种正则门控 值变换的轻量方案模板模式适合把 LDAP 式 DN、组 DN 等半结构化值重组成userdomain之类的简洁形式内联 Groovy 模式则适合需要条件分支、日志记录或跨属性合并的复杂变换。其实现位于 PatternMatchingAttributeReleasePolicy.java行为边界由 PatternMatchingAttributeReleasePolicyTests.java 中的八组测试用例完整锁定可作为配置与排错时的权威参考。赞分享后端认证鉴权单点登录【免费下载链接】casApereo CAS - Identity Single Sign On for all earthlings and beyond.项目地址https://gitcode.com/gh_mirrors/ca/cas点击查看免费下载相关推荐5条命令锁死 Cursor 自动更新把更新节奏拿回自己手里5条命令锁死 Cursor 自动更新把更新节奏拿回自己手里 你正改到关键几行代码右下角弹出更新待处理你点了稍后。第二天早上重新打开 Cursor后端认证鉴权单点登录CAS 属性释放 Consent 激活机制详解全局/服务级策略与 Groovy 动态判定CAS 属性释放 Consent 激活机制详解全局/服务级策略与 Groovy 动态判定 Apereo CAS 的属性释放Attribute Release后端认证鉴权单点登录res-downloader 下载失败自查手册3 层定位修复分片与完整性校验卡死res downloader 下载失败自查手册3 层定位修复分片与完整性校验卡死 res downloader 靠代理抓包——流量先过它、再筛出资源——把视后端认证鉴权单点登录上一篇CloudMapper故障排除终极指南解决10个最常见的安装和运行问题下一篇开源项目常见问题解决方案——拼音匹配库创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

SQL报错累积
SQL报错累积

一、SQL语句中字段名打错javax.servlet.ServletException: java.sql.SQLSyntaxErrorException: Unknown column b.depton in on clause 报错原因:在Scott数据库中 dept表中deptno字段名打错了String sql "select a.* ,b.dname from emp a join dept b on … · 2026/9/27 7:28:22

Mobile Next Mobile MCP开发者指南:如何扩展自定义工具和插件
Mobile Next Mobile MCP开发者指南:如何扩展自定义工具和插件

Mobile Next Mobile MCP开发者指南:如何扩展自定义工具和插件 【免费下载链接】mobile-mcp Model Context Protocol Server for Mobile Automation and Scraping (iOS, Android, Emulators, Simulators and Real Devices) 项目地址: https://gitcode.com/GitHub_T… · 2026/9/27 7:28:22

phpMyAdmin 自定义主题开发完全指南:theme.json 元数据、主题目录结构与配置项解析
phpMyAdmin 自定义主题开发完全指南:theme.json 元数据、主题目录结构与配置项解析

数据库后端 【免费下载链接】phpmyadmin A web interface for MySQL and MariaDB 项目地址: https://gitcode.com/gh_mirrors/ph/phpmyadmin 点击查看 免费下载 导读 phpMyAdmin 原生支持第三方主题,允许你在不修改核心代码的前提下,为 MyS… · 2026/9/27 7:28:16

ng-zorro-antd Popover 气泡卡片完全指南:API 详解、触发方式与滚动容器 FAQ
ng-zorro-antd Popover 气泡卡片完全指南:API 详解、触发方式与滚动容器 FAQ

UI组件前端 【免费下载链接】ng-zorro-antd Angular UI Component Library based on Ant Design 项目地址: https://gitcode.com/gh_mirrors/ng/ng-zorro-antd 点击查看 免费下载 导读 Popover(气泡卡片)是 ng-zorro-antd 组件库中基于 Ang… · 2026/9/27 8:03:42

2026最新解决模板网点地址信息错误3步规范
2026最新解决模板网点地址信息错误3步规范

2026最新解决模板网点地址信息错误3步规范 改个需求建站公司拖一周,这种憋屈事谁没遇到过?明明只是把官网底部那个“联系我们”里的省市区改一下,或者把线下门店的地址信息更新一下,结果开发说“要查数据库”、“要改后台配置”、“要重新部署”,这… · 2026/9/27 8:03:36

Native SDK 版本发布全流程指南:从版本号同步到 npm 可信发布
Native SDK 版本发布全流程指南:从版本号同步到 npm 可信发布

桌面应用跨平台 【免费下载链接】native Toolkit for building native desktop apps 项目地址: https://gitcode.com/gh_mirrors/ze/native 点击查看 免费下载 Native SDK(native-sdk/cli)的发布是一套人工驱动的单 PR 流程:由维… · 2026/9/27 8:03:36

智能合约大模型审计误报治理(False Positive Elimination):基于动态符号执行剪枝
智能合约大模型审计误报治理(False Positive Elimination):基于动态符号执行剪枝

智能合约大模型审计误报治理(False Positive Elimination):基于动态符号执行剪枝在智能合约自动化安全审计系统中,“误报率(False Positive Rate)过高” 是导致安全工程师对 AI 工具失去信心的头号痛点&… · 2026/9/27 8:03:36

wordpress阿帕奇伪静态避坑指南,这份速查手册救过无数人
wordpress阿帕奇伪静态避坑指南,这份速查手册救过无数人

wordpress阿帕奇伪静态避坑指南,这份速查手册救过无数人 刚接到个新单,客户急吼吼问为什么后台改了URL,前台404,后台又报500,备案信息还在审核中,人直接懵圈。别慌,这种“备案流程一头雾水”加上技术配置混乱的情况,我干了十年太常… · 2026/9/27 8:03:23

Puppet file_metadata HTTP 端点完全指南:掌握文件、目录与符号链接的元数据查询 API
Puppet file_metadata HTTP 端点完全指南:掌握文件、目录与符号链接的元数据查询 API

运维DevOpsIaC 【免费下载链接】puppet Server automation framework and application 项目地址: https://gitcode.com/gh_mirrors/pu/puppet 点击查看 免费下载 file_metadata 是 Puppet Server 内置的 HTTP API 端点,用于返回单个文件或多个文件的元数… · 2026/9/27 8:03:11

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

了解更多?预约专属演示

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

企业微信二维码