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

Returning array from Keycloak's script mapper

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

即当脚本 return 跟随数组时:

["one", "two"]

声明值被序列化为地图:

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

我期望 JSON 数组:

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

我该怎么办?

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

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

How do I create a Java array from JavaScript?

在 Rhino 上 FAQ

You must use Java reflection. For instance, to create an array of java.lang.String of length five, do

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

Then if you wish to assign the string "hi" to the first element, simply execute

stringArray[0] = "hi";

然而,为了让它工作,我需要通过添加 .class 来稍微修改它以获得预期的类型定义:

java.lang.reflect.Array.newInstance(java.lang.String.class, 5);`