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

时间:2017-12-21 13:20:03

标签: serialization wildfly claims-based-identity keycloak

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

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

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

声明值被序列化为地图:

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

我期待JSON数组:

scope

我该怎么办?

我想避免提供自定义协议映射器,我还有其他用于脚本映射器的用例,即处理audcategory::SearchOnCategorya()声明。

1 个答案:

答案 0 :(得分:2)

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

  

如何从JavaScript创建Java数组?

on 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);`