从Keycloak的脚本映射器返回数组

问题描述 投票:1回答:1

我想编写ScriptBasedOIDCProtocolMapper脚本来处理我的角色声明的一些自定义逻辑。不幸的是我无法返回正确的序列化数组。

即当脚本返回以下数组时:

["one", "two"]

声明值被序列化为地图:

...other claims...   
claimName: { 0: "one", 1: "two" }

在哪里我期待JSON数组:

...other claims...   
claimName: ["one", "two"]

我该怎么办?

我想避免提供自定义协议映射器,我有脚本映射器的其他用例,即处理scopeaud声称。

serialization wildfly claims-based-identity keycloak
1个回答
2
投票

我加强了搜索,我刚刚找到了问题的答案

如何从JavaScript创建Java数组?

关于Rhino FAQ

您必须使用Java反射。例如,要创建长度为5的java.lang.String数组,请执行

var stringArray = java.lang.reflect.Array.newInstance(java.lang.String, 5);

然后,如果您希望将字符串“hi”分配给第一个元素,只需执行即可

stringArray[0] = "hi";

但是要使其工作,我需要通过添加.class来修改它以获得预期的类型定义:

java.lang.reflect.Array.newInstance(java.lang.String.class, 5);`
© www.soinside.com 2019 - 2024. All rights reserved.