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