优化 tenant 登录逻辑
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/core/MutliTenantDatasourceProviderAdapter.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/core/MutliTenantDatasourceProviderAdapter.java
deleted file mode 100644
index 5d0d601..0000000
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/core/MutliTenantDatasourceProviderAdapter.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.supwisdom.dlpay.framework.core;
-
-import com.supwisdom.multitenant.datasource.MultiTenantDataSourceProvider;
-import com.supwisdom.multitenant.datasource.MultiTenantDatasourceAutoConfiguration;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
-import org.springframework.context.annotation.Configuration;
-
-@Configuration
-@ConditionalOnBean({MultiTenantDatasourceAutoConfiguration.class})
-public class MutliTenantDatasourceProviderAdapter implements DatabaseAdapter {
- private final MultiTenantDataSourceProvider multiTenantDataSourceProvider;
-
- public MutliTenantDatasourceProviderAdapter(MultiTenantDataSourceProvider multiTenantDataSourceProvider) {
- this.multiTenantDataSourceProvider = multiTenantDataSourceProvider;
- }
-
- @Override
- public String getDefaultSchema() {
- return multiTenantDataSourceProvider.defaultSchema();
- }
-}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/service/OperatorDetailService.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/service/OperatorDetailService.java
deleted file mode 100644
index bf72bfe..0000000
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/service/OperatorDetailService.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.supwisdom.dlpay.framework.service;
-
-import org.springframework.security.core.userdetails.UserDetailsService;
-
-public interface OperatorDetailService extends UserDetailsService {
-}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/service/impl/OperatorDetailServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/service/impl/MultiTenantOperatorDetailService.java
similarity index 66%
rename from payapi/src/main/java/com/supwisdom/dlpay/framework/service/impl/OperatorDetailServiceImpl.java
rename to payapi/src/main/java/com/supwisdom/dlpay/framework/service/impl/MultiTenantOperatorDetailService.java
index 88f2121..4171906 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/service/impl/OperatorDetailServiceImpl.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/service/impl/MultiTenantOperatorDetailService.java
@@ -3,14 +3,17 @@
import com.supwisdom.dlpay.framework.dao.OperRoleDao;
import com.supwisdom.dlpay.framework.dao.OperatorDao;
import com.supwisdom.dlpay.framework.domain.TOperator;
-import com.supwisdom.dlpay.framework.service.OperatorDetailService;
+import com.supwisdom.dlpay.framework.tenant.AbstractTenantUserOperator;
+import com.supwisdom.dlpay.framework.tenant.TenantUser;
+import com.supwisdom.dlpay.framework.util.Constants;
import com.supwisdom.dlpay.framework.util.StringUtil;
-import com.supwisdom.multitenant.TenantDetails;
import com.supwisdom.multitenant.TenantSessionHelper;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
@@ -24,24 +27,22 @@
@Slf4j
@Service
-public class OperatorDetailServiceImpl implements OperatorDetailService {
+public class MultiTenantOperatorDetailService implements UserDetailsService {
private final OperatorDao operatorDao;
private final OperRoleDao operRoleDao;
- private final TenantSessionHelper tenantSessionHelper;
+ private final AbstractTenantUserOperator tenantUserOperator;
- public OperatorDetailServiceImpl(OperatorDao operatorDao, OperRoleDao operRoleDao,
- TenantSessionHelper tenantSessionHelper) {
+ public MultiTenantOperatorDetailService(OperatorDao operatorDao, OperRoleDao operRoleDao,
+ AbstractTenantUserOperator tenantUserOperator) {
this.operatorDao = operatorDao;
this.operRoleDao = operRoleDao;
- this.tenantSessionHelper = tenantSessionHelper;
+ this.tenantUserOperator = tenantUserOperator;
}
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
- String domain = substringAfter(username, "@");
- tenantSessionHelper.setSessionTenantById(domain);
- String realname = substringBefore(username, "@");
- TOperator oper = operatorDao.findByOpercode(realname);
+ TenantUser tenantUser = tenantUserOperator.tenantUsername(username);
+ TOperator oper = operatorDao.findByOpercode(tenantUser.getUsername());
if (null == oper) {
throw new UsernameNotFoundException("管理员不存在");
}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/AbstractTenantUserOperator.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/AbstractTenantUserOperator.java
new file mode 100644
index 0000000..0ff2788
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/AbstractTenantUserOperator.java
@@ -0,0 +1,5 @@
+package com.supwisdom.dlpay.framework.tenant;
+
+public interface AbstractTenantUserOperator {
+ public TenantUser tenantUsername(String username);
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/MultiTenantUserAdapter.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/MultiTenantUserAdapter.java
new file mode 100644
index 0000000..fddcfd7
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/MultiTenantUserAdapter.java
@@ -0,0 +1,40 @@
+package com.supwisdom.dlpay.framework.tenant;
+
+import com.supwisdom.dlpay.framework.util.Constants;
+import com.supwisdom.multitenant.TenantSessionHelper;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.context.annotation.Primary;
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
+import org.springframework.stereotype.Component;
+
+import static org.apache.commons.lang3.StringUtils.substringAfter;
+import static org.apache.commons.lang3.StringUtils.substringBefore;
+
+@Component("multiTenantUserAdapter")
+@Primary
+@ConditionalOnBean(name = "multiTenantDatasourceAutoConfiguration")
+public class MultiTenantUserAdapter implements AbstractTenantUserOperator {
+ private static final String DOMAIN_SEP = "@";
+
+ private TenantSessionHelper tenantSessionHelper;
+
+ public MultiTenantUserAdapter(TenantSessionHelper tenantSessionHelper) {
+ this.tenantSessionHelper = tenantSessionHelper;
+ }
+
+ @Override
+ public TenantUser tenantUsername(String username) {
+ String domain = substringAfter(username, DOMAIN_SEP);
+ String realname = substringBefore(username, DOMAIN_SEP);
+ if (StringUtils.isEmpty(domain)) {
+ tenantSessionHelper.setSessionTenantById(Constants.DEFAULT_TENANTID);
+ } else {
+ tenantSessionHelper.setSessionTenantById(domain);
+ }
+ if (StringUtils.isEmpty(realname)) {
+ throw new UsernameNotFoundException("管理员不存在");
+ }
+ return new TenantUser(realname, domain);
+ }
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/StandaloneTenantUserAdapter.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/StandaloneTenantUserAdapter.java
new file mode 100644
index 0000000..b9038e2
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/StandaloneTenantUserAdapter.java
@@ -0,0 +1,13 @@
+package com.supwisdom.dlpay.framework.tenant;
+
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.stereotype.Component;
+
+@Component("standaloneTenantUserAdapter")
+@ConditionalOnMissingBean(name = "multiTenantDatasourceAutoConfiguration")
+public class StandaloneTenantUserAdapter implements AbstractTenantUserOperator {
+ @Override
+ public TenantUser tenantUsername(String username) {
+ return new TenantUser(username, "");
+ }
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantUser.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantUser.java
new file mode 100644
index 0000000..00d2cdd
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantUser.java
@@ -0,0 +1,30 @@
+package com.supwisdom.dlpay.framework.tenant;
+
+public class TenantUser {
+ private String username;
+ private String domain;
+
+ public TenantUser(String username, String domain) {
+ this.username = username;
+ this.domain = domain;
+ }
+
+ public TenantUser() {
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public String getDomain() {
+ return domain;
+ }
+
+ public void setDomain(String domain) {
+ this.domain = domain;
+ }
+}
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/security.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/security.kt
index 61c805f..9db3122 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/security.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/security.kt
@@ -6,7 +6,7 @@
import com.supwisdom.dlpay.framework.redisrepo.ApiJwtRepository
import com.supwisdom.dlpay.framework.security.MyAuthenticationFailureHandler
import com.supwisdom.dlpay.framework.security.ValidateCodeSecurityConfig
-import com.supwisdom.dlpay.framework.service.OperatorDetailService
+import com.supwisdom.dlpay.framework.service.impl.MultiTenantOperatorDetailService
import com.supwisdom.dlpay.framework.util.Constants
import com.supwisdom.dlpay.framework.util.TradeDict
import com.supwisdom.dlpay.mobile.AuthLoginFailHandler
@@ -337,9 +337,8 @@
lateinit var authenticationFailureHandler: MyAuthenticationFailureHandler
@Autowired
lateinit var passwordBCryptConfig: PasswordBCryptConfig
-
@Autowired
- lateinit var userDetailsService: OperatorDetailService
+ lateinit var multiTenantOperatorDetailService: MultiTenantOperatorDetailService
override fun configure(auth: AuthenticationManagerBuilder) {
auth.authenticationProvider(authenticationProvider())
@@ -348,7 +347,7 @@
@Bean
fun authenticationProvider(): DaoAuthenticationProvider {
return DaoAuthenticationProvider().apply {
- setUserDetailsService(userDetailsService)
+ setUserDetailsService(multiTenantOperatorDetailService)
setPasswordEncoder(passwordEncoder())
}
}