From: Tang Cheng Date: Thu, 19 Dec 2019 07:46:53 +0000 (+0800) Subject: 增加 payapi-sdk 支持多租户 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=88972a9373a64cae0790d6a38dab222d5abe56db;p=epayment%2Ffood_payapi.git 增加 payapi-sdk 支持多租户 --- diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/MultiTenantAutoConfig.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/MultiTenantAutoConfig.java new file mode 100644 index 00000000..f849ceaf --- /dev/null +++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/MultiTenantAutoConfig.java @@ -0,0 +1,16 @@ +package com.supwisdom.dlpay.paysdk; + +import com.supwisdom.dlpay.paysdk.tenant.DefaultMultiTenantProviderFactory; +import com.supwisdom.dlpay.paysdk.tenant.MultiTenantProviderFactory; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class MultiTenantAutoConfig { + @Bean + @ConditionalOnMissingBean(MultiTenantProviderFactory.class) + public MultiTenantProviderFactory defaultFactory() { + return new DefaultMultiTenantProviderFactory(); + } +} diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/PayAPIRequestInterceptor.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/PayAPIRequestInterceptor.java index 1002d525..0a11f396 100644 --- a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/PayAPIRequestInterceptor.java +++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/PayAPIRequestInterceptor.java @@ -1,18 +1,36 @@ package com.supwisdom.dlpay.paysdk; +import com.supwisdom.dlpay.paysdk.tenant.MultiTenantProviderFactory; import com.supwisdom.dlpay.paysdk.utils.Constants; import com.supwisdom.dlpay.paysdk.utils.JwtContext; import feign.RequestInterceptor; +import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; @Component public class PayAPIRequestInterceptor { + + @Value("${payapi.tenantid:}") + private String tenantid; + + private final MultiTenantProviderFactory tenantProviderFactory; + + public PayAPIRequestInterceptor(MultiTenantProviderFactory tenantProviderFactory) { + this.tenantProviderFactory = tenantProviderFactory; + } + @Bean public RequestInterceptor headerInterceptor() { return requestTemplate -> { // 小示例,没什么卵用 - requestTemplate.header(Constants.HEADER_TENANT_ID, "{tenantid}"); + String tenant; + if (tenantid != null || "".equals(tenantid)) { + tenant = tenantProviderFactory.getProvider().getCurrentTenant(); + } else { + tenant = tenantid; + } + requestTemplate.header(Constants.HEADER_TENANT_ID, tenant); String jwt = JwtContext.getJwt(); if (jwt != null) { requestTemplate.header(Constants.JWT_HEADER, "Bearer " + jwt); diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/tenant/DefaultMultiTenantProvider.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/tenant/DefaultMultiTenantProvider.java new file mode 100644 index 00000000..95dd221e --- /dev/null +++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/tenant/DefaultMultiTenantProvider.java @@ -0,0 +1,8 @@ +package com.supwisdom.dlpay.paysdk.tenant; + +public class DefaultMultiTenantProvider implements MultiTenantProvider { + @Override + public String getCurrentTenant() { + return "{tenantid}"; + } +} diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/tenant/DefaultMultiTenantProviderFactory.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/tenant/DefaultMultiTenantProviderFactory.java new file mode 100644 index 00000000..0b42fa3c --- /dev/null +++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/tenant/DefaultMultiTenantProviderFactory.java @@ -0,0 +1,9 @@ +package com.supwisdom.dlpay.paysdk.tenant; + +public class DefaultMultiTenantProviderFactory implements MultiTenantProviderFactory { + private MultiTenantProvider provider = new DefaultMultiTenantProvider(); + + public MultiTenantProvider getProvider() { + return provider; + } +} diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/tenant/MultiTenantProvider.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/tenant/MultiTenantProvider.java new file mode 100644 index 00000000..5db786ca --- /dev/null +++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/tenant/MultiTenantProvider.java @@ -0,0 +1,5 @@ +package com.supwisdom.dlpay.paysdk.tenant; + +public interface MultiTenantProvider { + String getCurrentTenant(); +} diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/tenant/MultiTenantProviderFactory.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/tenant/MultiTenantProviderFactory.java new file mode 100644 index 00000000..bc137c7b --- /dev/null +++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/tenant/MultiTenantProviderFactory.java @@ -0,0 +1,5 @@ +package com.supwisdom.dlpay.paysdk.tenant; + +public interface MultiTenantProviderFactory { + MultiTenantProvider getProvider(); +} diff --git a/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/CitizenCardPayProxyTest.java b/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/CitizenCardPayProxyTest.java index 1916f7a5..231a6846 100644 --- a/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/CitizenCardPayProxyTest.java +++ b/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/CitizenCardPayProxyTest.java @@ -294,7 +294,4 @@ public class CitizenCardPayProxyTest { } - public static void main(String[] args) { - - } } diff --git a/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/MultiTenantProxyTest.java b/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/MultiTenantProxyTest.java new file mode 100644 index 00000000..45b1b4c6 --- /dev/null +++ b/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/MultiTenantProxyTest.java @@ -0,0 +1,56 @@ +package com.supwisdom.dlpay.paysdktest; + +import com.supwisdom.dlpay.paysdk.ApiLoginHelper; +import com.supwisdom.dlpay.paysdk.proxy.ApiLoginProxy; +import com.supwisdom.dlpay.paysdk.tenant.MultiTenantProvider; +import com.supwisdom.dlpay.paysdk.tenant.MultiTenantProviderFactory; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.ImportAutoConfiguration; +import org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.cloud.netflix.ribbon.RibbonAutoConfiguration; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.cloud.openfeign.FeignAutoConfiguration; +import org.springframework.cloud.openfeign.ribbon.FeignRibbonClientAutoConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Primary; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +//@SpringBootTest(properties = { +// "payapi.url=http://localhost:8080/payapi"}, +// classes = MultiTenantProxyTest.class) +@ImportAutoConfiguration({RibbonAutoConfiguration.class, + FeignRibbonClientAutoConfiguration.class, FeignAutoConfiguration.class, + HttpMessageConvertersAutoConfiguration.class}) +@EnableFeignClients(basePackages = "com.supwisdom.dlpay.paysdk") +@ComponentScan(basePackages = {"com.supwisdom.dlpay.paysdk"}) +public class MultiTenantProxyTest { + + @Autowired + private ApiLoginProxy apiLoginProxy; + + private final static String appid = "700001"; + private final static String secret = "d6dd7f0d4551419d8d11736d0f28df0d"; + + + @TestConfiguration + static class MultiTenantTestBean { + @Bean + @Primary + public MultiTenantProviderFactory newProviderFactory() { + return () -> (MultiTenantProvider) () -> "122020"; + } + } + + + @Test + public void testMultiTenant() { + ApiLoginHelper helper = new ApiLoginHelper(apiLoginProxy); + helper.login(appid, secret); + } +} diff --git a/payapi/src/main/java/com/supwisdom/dlpay/agent/CheckFileProviderContext.java b/payapi/src/main/java/com/supwisdom/dlpay/agent/CheckFileProviderContext.java index ef92fb5b..e9b6c43a 100644 --- a/payapi/src/main/java/com/supwisdom/dlpay/agent/CheckFileProviderContext.java +++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/CheckFileProviderContext.java @@ -18,7 +18,7 @@ public class CheckFileProviderContext { try { return (CheckFileProvider) applicationContext.getBean(name + "CheckFileProvider"); } catch (BeansException ex) { - log.error("未定义 sourcetype <$sourcetype> 对账处理 Provider"); + log.error("未定义 sourcetype <{}> 对账处理 Provider", name); return null; } } diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TTenantCatalog.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TTenantCatalog.java new file mode 100644 index 00000000..36476645 --- /dev/null +++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TTenantCatalog.java @@ -0,0 +1,71 @@ +package com.supwisdom.dlpay.framework.domain; + +import javax.persistence.*; +import javax.validation.constraints.NotNull; +import java.sql.Timestamp; + +@Entity +@Table(name = "tb_tenant_catalog") +@SequenceGenerator(name = "tenant_catalog_seq") +public class TTenantCatalog { + @Id + @Column(name = "id") + @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "tenant_catalog_seq") + private Integer id; + + @Column(name = "tenantid", length = 32) + @NotNull + private String tenantid; + + @Column(name = "datecenter", length = 10) + @NotNull + private String dataCenter; + + @Column(name = "expire_date") + @NotNull + private Timestamp expireDate; + + @Column(name = "enabled") + @NotNull + private Boolean enabled; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getTenantid() { + return tenantid; + } + + public void setTenantid(String tenantid) { + this.tenantid = tenantid; + } + + public String getDataCenter() { + return dataCenter; + } + + public void setDataCenter(String dataCenter) { + this.dataCenter = dataCenter; + } + + public Timestamp getExpireDate() { + return expireDate; + } + + public void setExpireDate(Timestamp expireDate) { + this.expireDate = expireDate; + } + + public Boolean getEnabled() { + return enabled; + } + + public void setEnabled(Boolean enabled) { + this.enabled = enabled; + } +}