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/java/com/supwisdom/institute/backend/admin/aggr/configuration/FeignClientConfiguration.java b/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/configuration/FeignClientConfiguration.java
deleted file mode 100644
index 6bcf4c1..0000000
--- a/aggr/admin/src/main/java/com/supwisdom/institute/backend/admin/aggr/configuration/FeignClientConfiguration.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package com.supwisdom.institute.backend.admin.aggr.configuration;
-
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLSocketFactory;
-
-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 {
-
-  @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);
-    }
-    
-    if (keyStore == null || keyStore.isEmpty()) {
-      return new Client.Default(null, null);
-    } else {
-      try {
-        SSLContextBuilder sslContextBuilder = SSLContexts.custom();
-        if (trustStore == null || trustStore.isEmpty()) {
-        } else {
-          sslContextBuilder
-//            .loadTrustMaterial(TrustAllStrategy.INSTANCE)
-            .loadTrustMaterial(
-                ResourceUtils.getFile(trustStore),
-                trustStorePassword.toCharArray()
-            );
-        }
-        
-        sslContextBuilder
-          .loadKeyMaterial(
-              ResourceUtils.getFile(keyStore),
-              keyStorePassword.toCharArray(),
-              keyPassword.toCharArray());
-        
-        SSLContext sslContext = sslContextBuilder.build();
-        
-        SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
-
-        Client trustSSLSockets = new Client.Default(sslSocketFactory, new NoopHostnameVerifier());
-        log.info("feignClient load with ssl.");
-        return trustSSLSockets;
-      } catch (Exception e) {
-        e.printStackTrace();
-      }
-    }
-    
-    return new Client.Default(null, null);
-  }
-
-}
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