Knox身份断言正则:将[ABC123]转为无括号小写的实现问题
解决Knox正则身份断言无法将提取内容转小写的问题
核心原因
Knox的Regex身份断言组件不支持Java正则替换中的\L大小写转换标记,它仅支持{n}格式的分组反向引用,所以直接在替换字符串里用\L{1}是无效的。
可行解决方案
1. 链式配置Regex+LowerCase身份断言
利用Knox支持的多身份断言链式处理,先提取目标内容,再统一转小写:
<!-- 第一步:提取[]中的内容 --> <provider> <role>identity-assertion</role> <name>Regex</name> <enabled>true</enabled> <param> <name>pattern</name> <value>[(.*?)]</value> </param> <param> <name>replacement</name> <value>{1}</value> </param> </provider> <!-- 第二步:将提取后的内容转小写 --> <provider> <role>identity-assertion</role> <name>LowerCase</name> <enabled>true</enabled> </provider>
这个方案无需自定义代码,完全依赖Knox原生组件,适合简单场景。
2. 自定义Groovy脚本身份断言
如果需要更灵活的处理逻辑(比如同时处理多种格式的身份),可以用Groovy脚本实现提取+小写转换:
// 处理输入身份,提取[]内的内容并转小写 def input = principal def matchResult = input =~ /\[(.*?)\]/ if (matchResult.find()) { return matchResult.group(1).toLowerCase() } // 匹配失败时返回原身份 return input
将脚本保存为lowercase-extract.groovy,然后在Knox配置中引用:
<provider> <role>identity-assertion</role> <name>Groovy</name> <enabled>true</enabled> <param> <name>script</name> <value>lowercase-extract.groovy</value> </param> </provider>
内容的提问来源于stack exchange,提问作者StrangerThinks
相关产品推荐
相关产品推荐

