feat: 解决feign 调用多个后端服务时,使用独立的feign.Client配置,保证不同后端的client-auth的配置不同 得以生效
diff --git a/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/remote/base/configuration/BaseFeignClientConfiguration.java b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/remote/base/configuration/BaseFeignClientConfiguration.java
new file mode 100644
index 0000000..68e44f9
--- /dev/null
+++ b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/remote/base/configuration/BaseFeignClientConfiguration.java
@@ -0,0 +1,32 @@
+package com.supwisdom.institute.backend.admin.aggr.apis.remote.base.configuration;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+
+import com.supwisdom.institute.backend.common.core.feign.FeignClientBuilder;
+
+import feign.Client;
+
+public class BaseFeignClientConfiguration {
+
+ @Bean
+ public Client feignClient(
+ @Value("${sw-backend-base-api.client-auth.enabled:false}") boolean enabled,
+ @Value("${sw-backend-base-api.client-auth.key-password:}") String keyPassword,
+ @Value("${sw-backend-base-api.client-auth.key-store:}") String keyStore,
+ @Value("${sw-backend-base-api.client-auth.key-store-password:}") String keyStorePassword,
+ @Value("${sw-backend-base-api.client-auth.trust-store:}") String trustStore,
+ @Value("${sw-backend-base-api.client-auth.trust-store-password:}") String trustStorePassword) {
+
+ return FeignClientBuilder.builder()
+ .enabled(enabled)
+ .keyPassword(keyPassword)
+ .keyStore(keyStore)
+ .keyStorePassword(keyStorePassword)
+ .trustStore(trustStore)
+ .trustStorePassword(trustStorePassword)
+ .build()
+ .client();
+ }
+
+}
diff --git a/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/remote/base/v1/admin/AdminAccountRemoteFallbackFactory.java b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/remote/base/v1/admin/AdminAccountRemoteFallbackFactory.java
new file mode 100644
index 0000000..586942a
--- /dev/null
+++ b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/remote/base/v1/admin/AdminAccountRemoteFallbackFactory.java
@@ -0,0 +1,14 @@
+package com.supwisdom.institute.backend.admin.aggr.apis.remote.base.v1.admin;
+
+import feign.hystrix.FallbackFactory;
+
+public class AdminAccountRemoteFallbackFactory implements FallbackFactory<AdminAccountRemoteFeignClient> {
+
+ @Override
+ public AdminAccountRemoteFeignClient create(Throwable cause) {
+ return new AdminAccountRemoteFeignClient() {
+
+ };
+ }
+
+}
diff --git a/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/remote/base/v1/admin/AdminAccountRemoteFeignClient.java b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/remote/base/v1/admin/AdminAccountRemoteFeignClient.java
new file mode 100644
index 0000000..133309c
--- /dev/null
+++ b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/remote/base/v1/admin/AdminAccountRemoteFeignClient.java
@@ -0,0 +1,15 @@
+package com.supwisdom.institute.backend.admin.aggr.apis.remote.base.v1.admin;
+
+import org.springframework.cloud.openfeign.FeignClient;
+
+import com.supwisdom.institute.backend.admin.aggr.apis.remote.base.configuration.BaseFeignClientConfiguration;
+
+@FeignClient(
+ configuration = {BaseFeignClientConfiguration.class},
+ name = "base-admin-account-remote-feign-client",
+ url = "${sw-backend-base-api.uri}/v1/admin/accounts",
+ fallbackFactory = AdminAccountRemoteFallbackFactory.class
+)
+public interface AdminAccountRemoteFeignClient {
+
+}
diff --git a/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/remote/biz/configuration/BizFeignClientConfiguration.java b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/remote/biz/configuration/BizFeignClientConfiguration.java
new file mode 100644
index 0000000..88f5cda
--- /dev/null
+++ b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/remote/biz/configuration/BizFeignClientConfiguration.java
@@ -0,0 +1,32 @@
+package com.supwisdom.institute.backend.admin.aggr.apis.remote.biz.configuration;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+
+import com.supwisdom.institute.backend.common.core.feign.FeignClientBuilder;
+
+import feign.Client;
+
+public class BizFeignClientConfiguration {
+
+ @Bean
+ public Client feignClient(
+ @Value("${sw-backend-biz-api.client-auth.enabled:false}") boolean enabled,
+ @Value("${sw-backend-biz-api.client-auth.key-password:}") String keyPassword,
+ @Value("${sw-backend-biz-api.client-auth.key-store:}") String keyStore,
+ @Value("${sw-backend-biz-api.client-auth.key-store-password:}") String keyStorePassword,
+ @Value("${sw-backend-biz-api.client-auth.trust-store:}") String trustStore,
+ @Value("${sw-backend-biz-api.client-auth.trust-store-password:}") String trustStorePassword) {
+
+ return FeignClientBuilder.builder()
+ .enabled(enabled)
+ .keyPassword(keyPassword)
+ .keyStore(keyStore)
+ .keyStorePassword(keyStorePassword)
+ .trustStore(trustStore)
+ .trustStorePassword(trustStorePassword)
+ .build()
+ .client();
+ }
+
+}
diff --git a/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/remote/biz/BizRemoteFallbackFactory.java b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/remote/biz/v1/admin/AdminBizRemoteFallbackFactory.java
similarity index 86%
rename from aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/remote/biz/BizRemoteFallbackFactory.java
rename to aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/remote/biz/v1/admin/AdminBizRemoteFallbackFactory.java
index 22447f0..d27ce1f 100644
--- a/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/remote/biz/BizRemoteFallbackFactory.java
+++ b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/remote/biz/v1/admin/AdminBizRemoteFallbackFactory.java
@@ -1,4 +1,4 @@
-package com.supwisdom.institute.backend.admin.aggr.apis.remote.biz;
+package com.supwisdom.institute.backend.admin.aggr.apis.remote.biz.v1.admin;
import org.springframework.stereotype.Component;
@@ -9,11 +9,11 @@
import feign.hystrix.FallbackFactory;
@Component
-public class BizRemoteFallbackFactory implements FallbackFactory<BizRemoteFeignClient> {
+public class AdminBizRemoteFallbackFactory implements FallbackFactory<AdminBizRemoteFeignClient> {
@Override
- public BizRemoteFeignClient create(Throwable cause) {
- return new BizRemoteFeignClient() {
+ public AdminBizRemoteFeignClient create(Throwable cause) {
+ return new AdminBizRemoteFeignClient() {
@Override
public JSONObject query(boolean loadAll, int pageIndex, int pageSize) {
diff --git a/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/remote/biz/BizRemoteFeignClient.java b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/remote/biz/v1/admin/AdminBizRemoteFeignClient.java
similarity index 80%
rename from aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/remote/biz/BizRemoteFeignClient.java
rename to aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/remote/biz/v1/admin/AdminBizRemoteFeignClient.java
index 9361f45..99ec029 100644
--- a/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/remote/biz/BizRemoteFeignClient.java
+++ b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/remote/biz/v1/admin/AdminBizRemoteFeignClient.java
@@ -1,4 +1,4 @@
-package com.supwisdom.institute.backend.admin.aggr.apis.remote.biz;
+package com.supwisdom.institute.backend.admin.aggr.apis.remote.biz.v1.admin;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
@@ -9,13 +9,15 @@
import com.alibaba.fastjson.JSONObject;
import com.supwisdom.institute.backend.admin.aggr.apis.model.biz.Biz;
+import com.supwisdom.institute.backend.admin.aggr.apis.remote.biz.configuration.BizFeignClientConfiguration;
@FeignClient(
- name = "biz-biz-remote-feign-client",
+ configuration = {BizFeignClientConfiguration.class},
+ name = "biz-admin-biz-remote-feign-client",
url = "${sw-backend-biz-api.uri}/v1/admin/biz",
- fallbackFactory = BizRemoteFallbackFactory.class
+ fallbackFactory = AdminBizRemoteFallbackFactory.class
)
-public interface BizRemoteFeignClient {
+public interface AdminBizRemoteFeignClient {
@RequestMapping(method = RequestMethod.GET)
JSONObject query(
diff --git a/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/service/biz/BizService.java b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/service/biz/BizService.java
index 49baee2..acc2ac7 100644
--- a/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/service/biz/BizService.java
+++ b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/apis/service/biz/BizService.java
@@ -4,14 +4,14 @@
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSONObject;
-import com.supwisdom.institute.backend.admin.aggr.apis.remote.biz.BizRemoteFeignClient;
+import com.supwisdom.institute.backend.admin.aggr.apis.remote.biz.v1.admin.AdminBizRemoteFeignClient;
import com.supwisdom.institute.backend.admin.aggr.apis.vo.biz.response.data.BizQueryResponseData;
@Service
public class BizService {
@Autowired
- private BizRemoteFeignClient bizRemote;
+ private AdminBizRemoteFeignClient bizRemote;
public BizQueryResponseData query(boolean loadAll, int pageIndex, int pageSize) {
diff --git a/aggr/admin/src/main/resources/application-docker.yml b/aggr/admin/src/main/resources/application-docker.yml
index a46fee8..78c8a3d 100644
--- a/aggr/admin/src/main/resources/application-docker.yml
+++ b/aggr/admin/src/main/resources/application-docker.yml
@@ -43,26 +43,32 @@
##
# server url for feign
#
-sw-backend-base-api:
+sw-backend-base-api:
uri: ${SW_BACKEND_BASE_API_URI:https://sw-backend-admin-sa}
client-auth:
- enabled: ${CASSERVER_SA_API_CLIENT_AUTH_ENABLED:true}
- key-password: ${CASSERVER_SA_API_CLIENT_AUTH_KEY_PASSWORD:}
- key-store: ${CASSERVER_SA_API_CLIENT_AUTH_KEYSTORE_FILE:file:/certs/common/common.keystore}
- key-store-password: ${CASSERVER_SA_API_CLIENT_AUTH_KEYSTORE_PASSWORD:}
- trust-store: ${CASSERVER_SA_API_CLIENT_AUTH_TRUSTSTORE_FILE:file:/certs/common/common.truststore}
- trust-store-password: ${CASSERVER_SA_API_CLIENT_AUTH_TRUSTSTORE_PASSWORD:}
-
-sw-backend-system-api.uri: http://localhost:8081
-sw-backend-biz-api.uri: http://localhost:8081
+ enabled: ${SW_BACKEND_BASE_API_CLIENT_AUTH_ENABLED:true}
+ key-password: ${SW_BACKEND_BASE_API_CLIENT_AUTH_KEY_PASSWORD:}
+ key-store: ${SW_BACKEND_BASE_API_CLIENT_AUTH_KEYSTORE_FILE:file:/certs/common/common.keystore}
+ key-store-password: ${SW_BACKEND_BASE_API_CLIENT_AUTH_KEYSTORE_PASSWORD:}
+ trust-store: ${SW_BACKEND_BASE_API_CLIENT_AUTH_TRUSTSTORE_FILE:file:/certs/common/common.truststore}
+ trust-store-password: ${SW_BACKEND_BASE_API_CLIENT_AUTH_TRUSTSTORE_PASSWORD:}
-sw-backend-api-admin:
- server:
- url: ${CASSERVER_SA_API_SERVER_URL:https://sw-backend}
+sw-backend-system-api:
+ uri: ${SW_BACKEND_SYSTEM_API_URI:https://sw-backend-admin-sa}
client-auth:
- enabled: ${CASSERVER_SA_API_CLIENT_AUTH_ENABLED:true}
- key-password: ${CASSERVER_SA_API_CLIENT_AUTH_KEY_PASSWORD:}
- key-store: ${CASSERVER_SA_API_CLIENT_AUTH_KEYSTORE_FILE:file:/certs/common/common.keystore}
- key-store-password: ${CASSERVER_SA_API_CLIENT_AUTH_KEYSTORE_PASSWORD:}
- trust-store: ${CASSERVER_SA_API_CLIENT_AUTH_TRUSTSTORE_FILE:file:/certs/common/common.truststore}
- trust-store-password: ${CASSERVER_SA_API_CLIENT_AUTH_TRUSTSTORE_PASSWORD:}
+ enabled: ${SW_BACKEND_SYSTEM_API_CLIENT_AUTH_ENABLED:true}
+ key-password: ${SW_BACKEND_SYSTEM_API_CLIENT_AUTH_KEY_PASSWORD:}
+ key-store: ${SW_BACKEND_SYSTEM_API_CLIENT_AUTH_KEYSTORE_FILE:file:/certs/common/common.keystore}
+ key-store-password: ${SW_BACKEND_SYSTEM_API_CLIENT_AUTH_KEYSTORE_PASSWORD:}
+ trust-store: ${SW_BACKEND_SYSTEM_API_CLIENT_AUTH_TRUSTSTORE_FILE:file:/certs/common/common.truststore}
+ trust-store-password: ${SW_BACKEND_SYSTEM_API_CLIENT_AUTH_TRUSTSTORE_PASSWORD:}
+
+sw-backend-biz-api:
+ uri: ${SW_BACKEND_BIZ_API_URI:https://sw-backend-admin-sa}
+ client-auth:
+ enabled: ${SW_BACKEND_BIZ_API_CLIENT_AUTH_ENABLED:true}
+ key-password: ${SW_BACKEND_BIZ_API_CLIENT_AUTH_KEY_PASSWORD:}
+ key-store: ${SW_BACKEND_BIZ_API_CLIENT_AUTH_KEYSTORE_FILE:file:/certs/common/common.keystore}
+ key-store-password: ${SW_BACKEND_BIZ_API_CLIENT_AUTH_KEYSTORE_PASSWORD:}
+ trust-store: ${SW_BACKEND_BIZ_API_CLIENT_AUTH_TRUSTSTORE_FILE:file:/certs/common/common.truststore}
+ trust-store-password: ${SW_BACKEND_BIZ_API_CLIENT_AUTH_TRUSTSTORE_PASSWORD:}
diff --git a/aggr/admin/src/main/resources/application.yml b/aggr/admin/src/main/resources/application.yml
index e0683b0..8ad7215 100644
--- a/aggr/admin/src/main/resources/application.yml
+++ b/aggr/admin/src/main/resources/application.yml
@@ -1,5 +1,5 @@
server:
- port: 8082
+ port: 8081
ssl:
enabled: false
@@ -23,6 +23,30 @@
time-zone: Asia/Shanghai
+feign:
+ client:
+ config:
+ default:
+ #errorDecoder: com.supwisdom.leaveschool.common.config.BaseExceptionErrorDecoder
+ connectTimeout: 12000
+ readTimeout: 12000
+ loggerLevel: full
+ hystrix:
+ enabled: true
+ httpclient:
+ enabled: true
+
+hystrix:
+ command:
+ default:
+ execution:
+ timeout:
+ enabled: true
+ isolation:
+ thread:
+ timeoutInMilliseconds: 12000
+
+
##
# infras.online-doc
#
@@ -34,6 +58,11 @@
##
# server url for feign
#
-sw-backend-base-api.uri: http://localhost:8081
-sw-backend-system-api.uri: http://localhost:8081
-sw-backend-biz-api.uri: http://localhost:8081
+sw-backend-base-api:
+ uri: http://localhost:8082
+
+sw-backend-system-api:
+ uri: http://localhost:8082
+
+sw-backend-biz-api:
+ uri: http://localhost:8082
diff --git a/bff/admin/src/main/resources/application-docker.yml b/bff/admin/src/main/resources/application-docker.yml
index 394e329..9fb465a 100644
--- a/bff/admin/src/main/resources/application-docker.yml
+++ b/bff/admin/src/main/resources/application-docker.yml
@@ -27,6 +27,45 @@
com.supwisdom: INFO
+spring:
+ jackson:
+ time-zone: ${JACKSON_TIME_ZONE:Asia/Shanghai}
+
+
+##
+# spring cloud gateway
+#
+ cloud:
+ gateway:
+ metrics:
+ enabled: true
+ routes:
+ - id: aggr-api
+ uri: ${SW_BACKEND_AGGR_API_URI:https://sw-backend-admin-aggr}
+ predicates:
+ - Path=/api/aggr/**
+ filters:
+ - RewritePath=/api/aggr/(?<suffix>.*), /$\{suffix}
+ - id: base-api
+ uri: ${SW_BACKEND_BASE_API_URI:https://sw-backend-admin-sa}
+ predicates:
+ - Path=/api/base/**
+ filters:
+ - RewritePath=/api/base/(?<suffix>.*), /$\{suffix}
+ - id: system-api
+ uri: ${SW_BACKEND_SYSTEM_API_URI:https://sw-backend-admin-sa}
+ predicates:
+ - Path=/api/system/**
+ filters:
+ - RewritePath=/api/system/(?<suffix>.*), /$\{suffix}
+ - id: biz-api
+ uri: ${SW_BACKEND_BIZ_API_URI:https://sw-backend-admin-sa}
+ predicates:
+ - Path=/api/biz/**
+ filters:
+ - RewritePath=/api/biz/(?<suffix>.*), /$\{suffix}
+
+
##
# infras.online-doc
#
diff --git a/bff/admin/src/main/resources/application.yml b/bff/admin/src/main/resources/application.yml
index 77789ac..5893a41 100644
--- a/bff/admin/src/main/resources/application.yml
+++ b/bff/admin/src/main/resources/application.yml
@@ -26,49 +26,31 @@
enabled: true
routes:
- id: aggr-api
- uri: http://localhost:8082
+ uri: http://localhost:8081
predicates:
- Path=/api/aggr/**
filters:
- RewritePath=/api/aggr/(?<suffix>.*), /$\{suffix}
- id: base-api
- uri: http://localhost:8081
+ uri: http://localhost:8082
predicates:
- Path=/api/base/**
filters:
- RewritePath=/api/base/(?<suffix>.*), /$\{suffix}
+ - id: system-api
+ uri: http://localhost:8082
+ predicates:
+ - Path=/api/system/**
+ filters:
+ - RewritePath=/api/system/(?<suffix>.*), /$\{suffix}
- id: biz-api
- uri: http://localhost:8081
+ uri: http://localhost:8082
predicates:
- Path=/api/biz/**
filters:
- RewritePath=/api/biz/(?<suffix>.*), /$\{suffix}
-feign:
- client:
- config:
- default:
- #errorDecoder: com.supwisdom.leaveschool.common.config.BaseExceptionErrorDecoder
- connectTimeout: 12000
- readTimeout: 12000
- loggerLevel: full
- hystrix:
- enabled: true
- httpclient:
- enabled: true
-
-hystrix:
- command:
- default:
- execution:
- timeout:
- enabled: true
- isolation:
- thread:
- timeoutInMilliseconds: 12000
-
-
##
# infras.online-doc
#
diff --git a/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/configuration/FeignClientConfiguration.java b/common/core/src/main/java/com/supwisdom/institute/backend/common/core/feign/FeignClientBuilder.java
similarity index 64%
rename from aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/configuration/FeignClientConfiguration.java
rename to common/core/src/main/java/com/supwisdom/institute/backend/common/core/feign/FeignClientBuilder.java
index 6bcf4c1..2fe606f 100644
--- a/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/configuration/FeignClientConfiguration.java
+++ b/common/core/src/main/java/com/supwisdom/institute/backend/common/core/feign/FeignClientBuilder.java
@@ -1,32 +1,31 @@
-package com.supwisdom.institute.backend.admin.aggr.configuration;
+package com.supwisdom.institute.backend.common.core.feign;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
+import lombok.extern.slf4j.Slf4j;
+
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.ssl.SSLContexts;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
import org.springframework.util.ResourceUtils;
import feign.Client;
-import lombok.extern.slf4j.Slf4j;
@Slf4j
-@Configuration
-public class FeignClientConfiguration {
+@lombok.Builder
+public class FeignClientBuilder {
+
+ private final boolean enabled;
+
+ private String keyPassword;
+ private String keyStore;
+ private String keyStorePassword;
+ private String trustStore;
+ private String trustStorePassword;
+
+ public Client client() {
- @Bean
- public Client feignClient(
- @Value("${cas-server-sa-api.client-auth.enabled:false}") boolean enabled,
- @Value("${cas-server-sa-api.client-auth.key-password:}") String keyPassword,
- @Value("${cas-server-sa-api.client-auth.key-store:}") String keyStore,
- @Value("${cas-server-sa-api.client-auth.key-store-password:}") String keyStorePassword,
- @Value("${cas-server-sa-api.client-auth.trust-store:}") String trustStore,
- @Value("${cas-server-sa-api.client-auth.trust-store-password:}") String trustStorePassword) {
-
if (!enabled) {
return new Client.Default(null, null);
}
diff --git a/sa/admin/src/main/resources/application.yml b/sa/admin/src/main/resources/application.yml
index 0ffd54f..da96932 100644
--- a/sa/admin/src/main/resources/application.yml
+++ b/sa/admin/src/main/resources/application.yml
@@ -1,5 +1,5 @@
server:
- port: 8081
+ port: 8082
ssl:
enabled: false