diff --git a/eiam-console/src/main/java/cn/topiam/employee/console/service/identitysource/impl/IdentitySourceServiceImpl.java b/eiam-console/src/main/java/cn/topiam/employee/console/service/identitysource/impl/IdentitySourceServiceImpl.java index ed9ad9e2..245fcfac 100644 --- a/eiam-console/src/main/java/cn/topiam/employee/console/service/identitysource/impl/IdentitySourceServiceImpl.java +++ b/eiam-console/src/main/java/cn/topiam/employee/console/service/identitysource/impl/IdentitySourceServiceImpl.java @@ -20,6 +20,11 @@ package cn.topiam.employee.console.service.identitysource.impl; import java.util.List; import java.util.Optional; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; import org.springframework.cache.annotation.CacheConfig; import org.springframework.data.domain.PageRequest; import org.springframework.data.jpa.domain.Specification; @@ -245,20 +250,28 @@ public class IdentitySourceServiceImpl implements IdentitySourceService { */ @Override public Boolean identitySourceConfigValidator(IdentitySourceConfigValidatorParam param) { - return switch (param.getProvider()) { - //钉钉 - case DINGTALK -> { - DingTalkConfig config = JSONObject.parseObject(param.getConfig().toJSONString(), - DingTalkConfig.class); - yield new DingTalkConfigValidator().validate(config); - } - case FEISHU -> { - FeiShuConfig config = JSONObject.parseObject(param.getConfig().toJSONString(), - FeiShuConfig.class); - yield new FeiShuConfigValidator().validate(config); - } - default -> throw new TopIamException("暂未支持此提供商连接验证"); - }; + ObjectMapper objectMapper = new ObjectMapper(); + objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); + objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); + try { + return switch (param.getProvider()) { + //钉钉 + case DINGTALK -> { + DingTalkConfig config = objectMapper + .readValue(param.getConfig().toJSONString(), DingTalkConfig.class);; + yield new DingTalkConfigValidator().validate(config); + } + case FEISHU -> { + FeiShuConfig config = objectMapper + .readValue(param.getConfig().toJSONString(), FeiShuConfig.class); + yield new FeiShuConfigValidator().validate(config); + } + default -> throw new TopIamException("暂未支持此提供商连接验证"); + }; + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } } /** diff --git a/eiam-identity-source/eiam-identity-source-dingtalk/src/main/java/cn/topiam/employee/identitysource/dingtalk/DingTalkConfig.java b/eiam-identity-source/eiam-identity-source-dingtalk/src/main/java/cn/topiam/employee/identitysource/dingtalk/DingTalkConfig.java index 41ac7331..aecb162b 100644 --- a/eiam-identity-source/eiam-identity-source-dingtalk/src/main/java/cn/topiam/employee/identitysource/dingtalk/DingTalkConfig.java +++ b/eiam-identity-source/eiam-identity-source-dingtalk/src/main/java/cn/topiam/employee/identitysource/dingtalk/DingTalkConfig.java @@ -67,4 +67,7 @@ public class DingTalkConfig extends IdentitySourceConfig { */ @JsonPropertyEncrypt private String token; + + public DingTalkConfig() { + } } diff --git a/eiam-identity-source/eiam-identity-source-feishu/src/main/java/cn/topiam/employee/identitysource/feishu/FeiShuConfig.java b/eiam-identity-source/eiam-identity-source-feishu/src/main/java/cn/topiam/employee/identitysource/feishu/FeiShuConfig.java index 1d07a548..d092f97f 100644 --- a/eiam-identity-source/eiam-identity-source-feishu/src/main/java/cn/topiam/employee/identitysource/feishu/FeiShuConfig.java +++ b/eiam-identity-source/eiam-identity-source-feishu/src/main/java/cn/topiam/employee/identitysource/feishu/FeiShuConfig.java @@ -63,4 +63,7 @@ public class FeiShuConfig extends IdentitySourceConfig { */ @JsonPropertyEncrypt private String verificationToken; + + public FeiShuConfig() { + } }