Okta表达式语言Strings.join()单元素拼接异常及规避方法咨询
Okta表达式语言Strings.join()的尾随分隔符问题及解决方法
问题描述
使用Okta表达式语言的Strings.join()拼接字符串时,当仅传入单个元素时会自动追加分隔符,这和Python、JavaScript等多数编程语言的行为不一致:
Strings.join(":", "Group1", "Group2") // 返回 "Group1:Group2"(符合预期) Strings.join(":", "Group1") // 返回 "Group1:"(不符合预期,期望返回"Group1")
该问题在与AWS AppStream 2.0集成时会引发故障——AWS AppStream 2.0要求组名称格式为:
group1:group2 group1 // 单个组时无尾随冒号
带尾随冒号的格式(如group1:)会破坏下游的解析与授权逻辑。
解决方法
方法1:条件判断移除末尾分隔符
先执行拼接,再检查结果是否以分隔符结尾,若是则截取掉最后一位:
var joinedResult = Strings.join(":", Groups); if (Strings.endsWith(joinedResult, ":")) { Strings.substring(joinedResult, 0, Strings.length(joinedResult) - 1) } else { joinedResult }
方法2:提前判断元素数量
先获取组列表的长度,若仅单个元素则直接返回该元素,否则调用拼接方法:
if (Groups.length == 1) { Groups[0] } else { Strings.join(":", Groups) }
方法3:正则替换末尾分隔符
利用正则匹配并移除字符串末尾的分隔符:
Strings.replace(Strings.join(":", Groups), ":$", "")
内容的提问来源于stack exchange,提问作者Mohamed Aslam
相关产品推荐
相关产品推荐

