diff --git a/perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/userInfo/PerunUserInfoCacheLoader.java b/perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/userInfo/PerunUserInfoCacheLoader.java index bb8340173837640c53e5bede2fbb4ef19aa45fbf..faff1d902cf73efa994f5b477a14e2a04e2b3539 100644 --- a/perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/userInfo/PerunUserInfoCacheLoader.java +++ b/perun-oidc-server/src/main/java/cz/muni/ics/oidc/server/userInfo/PerunUserInfoCacheLoader.java @@ -303,18 +303,22 @@ public class PerunUserInfoCacheLoader extends CacheLoader<UserInfoCacheKey, User return TextNode.valueOf(modifier.modify(claimInJson.asText())); } else if (claimInJson.isArray()) { ArrayNode arrayNode = (ArrayNode) claimInJson; - ArrayNode newArrayNode = JsonNodeFactory.instance.arrayNode(); + Set<TextNode> uniqueValues = new HashSet<>(); for (int i = 0; i < arrayNode.size(); i++) { JsonNode item = arrayNode.get(i); if (item.isTextual()) { String original = item.asText(); String modified = modifier.modify(original); if (!modifier.isReplaceOldValue()) { - newArrayNode.add(TextNode.valueOf(original)); + uniqueValues.add(TextNode.valueOf(original)); } - newArrayNode.add(TextNode.valueOf(modified)); + uniqueValues.add(TextNode.valueOf(modified)); } } + ArrayNode newArrayNode = JsonNodeFactory.instance.arrayNode(); + for (TextNode child : uniqueValues) { + newArrayNode.add(child); + } return newArrayNode; } else { log.warn("Original value is neither string nor array of strings - cannot modify values");