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