Эх сурвалжийг харах

feat: 引入jpa多租户

jpa拦截初步完成
tiger 1 жил өмнө
parent
commit
130581bc0c
22 өөрчлөгдсөн 182 нэмэгдсэн , 475 устгасан
  1. 9 0
      iot-common/iot-common-dao/iot-common-model/pom.xml
  2. 2 1
      iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/model/TbProduct.java
  3. 1 5
      iot-common/iot-common-satoken/pom.xml
  4. 0 14
      iot-common/iot-common-satoken/src/main/java/cc/iotkit/common/satoken/config/SaTokenConfig.java
  5. 1 1
      iot-common/iot-common-satoken/src/main/java/cc/iotkit/common/satoken/utils/LoginHelper.java
  6. 45 0
      iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/Config/TenantConfig.java
  7. 35 0
      iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/aspect/TenantFilterAspect.java
  8. 0 92
      iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/config/TenantConfig.java
  9. 0 21
      iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/core/TenantDto.java
  10. 0 148
      iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/core/TenantSaTokenDao.java
  11. 44 0
      iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/dao/AbstractBaseEntity.java
  12. 1 1
      iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/dao/TenantAware.java
  13. 0 55
      iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/handle/PlusTenantLineHandler.java
  14. 0 59
      iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/handle/TenantKeyPrefixHandler.java
  15. 13 6
      iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/interceptor/TenantInterceptor.java
  16. 13 3
      iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/listener/TenantListener.java
  17. 0 32
      iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/manager/TenantSpringCacheManager.java
  18. 0 27
      iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/properties/TenantProperties.java
  19. 11 5
      iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/util/TenantContext.java
  20. 2 1
      iot-module/iot-system/src/main/java/cc/iotkit/system/controller/SysTenantController.java
  21. 3 2
      iot-module/iot-system/src/main/java/cc/iotkit/system/service/impl/SysTenantServiceImpl.java
  22. 2 2
      iot-starter/src/main/java/cc/iotkit/Application.java

+ 9 - 0
iot-common/iot-common-dao/iot-common-model/pom.xml

@@ -25,10 +25,19 @@
             <artifactId>jackson-annotations</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-jpa</artifactId>
+        </dependency>
+
         <dependency>
             <groupId>cc.iotkit</groupId>
             <artifactId>iot-common-core</artifactId>
         </dependency>
+        <dependency>
+            <groupId>cc.iotkit</groupId>
+            <artifactId>iot-common-tenant</artifactId>
+        </dependency>
 
     </dependencies>
 

+ 2 - 1
iot-common/iot-common-dao/iot-data-serviceImpl-rdb/src/main/java/cc/iotkit/data/model/TbProduct.java

@@ -9,6 +9,7 @@
  */
 package cc.iotkit.data.model;
 
+import cc.iotkit.common.tenant.dao.AbstractBaseEntity;
 import cc.iotkit.model.product.Product;
 import io.github.linpeilie.annotations.AutoMapper;
 import io.swagger.annotations.ApiModel;
@@ -26,7 +27,7 @@ import javax.persistence.Table;
 @ApiModel(value = "产品")
 @Table(name = "product")
 @AutoMapper(target = Product.class)
-public class TbProduct {
+public class TbProduct extends AbstractBaseEntity {
 
     @Id
     @GeneratedValue(generator = "SnowflakeIdGenerator")

+ 1 - 5
iot-common/iot-common-satoken/pom.xml

@@ -39,11 +39,7 @@
             <groupId>cc.iotkit</groupId>
             <artifactId>iot-common-redis</artifactId>
         </dependency>
-        
-        <dependency>
-            <groupId>cc.iotkit</groupId>
-            <artifactId>iot-common-tenant</artifactId>
-        </dependency>
+
         <dependency>
             <groupId>cc.iotkit</groupId>
             <artifactId>iot-common-web</artifactId>

+ 0 - 14
iot-common/iot-common-satoken/src/main/java/cc/iotkit/common/satoken/config/SaTokenConfig.java

@@ -2,15 +2,12 @@ package cc.iotkit.common.satoken.config;
 
 import cc.iotkit.common.satoken.core.dao.PlusSaTokenDao;
 import cc.iotkit.common.satoken.core.service.SaPermissionImpl;
-import cc.iotkit.common.tenant.interceptor.TenantInterceptor;
 import cn.dev33.satoken.dao.SaTokenDao;
 import cn.dev33.satoken.jwt.StpLogicJwtForSimple;
 import cn.dev33.satoken.stp.StpInterface;
 import cn.dev33.satoken.stp.StpLogic;
-import lombok.RequiredArgsConstructor;
 import org.springframework.boot.autoconfigure.AutoConfiguration;
 import org.springframework.context.annotation.Bean;
-import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
 /**
@@ -18,13 +15,8 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
  *
  * @author Lion Li
  */
-
-@RequiredArgsConstructor
 @AutoConfiguration
 public class SaTokenConfig implements WebMvcConfigurer {
-    
-    private final TenantInterceptor tenantInterceptor;
-
     @Bean
     public StpLogic getStpLogicJwt() {
         // Sa-Token 整合 jwt (简单模式)
@@ -47,10 +39,4 @@ public class SaTokenConfig implements WebMvcConfigurer {
         return new PlusSaTokenDao();
     }
 
-    @Override
-    public void addInterceptors(InterceptorRegistry registry) {
-        registry.addWebRequestInterceptor(tenantInterceptor);
-    }
-
-
 }

+ 1 - 1
iot-common/iot-common-satoken/src/main/java/cc/iotkit/common/satoken/utils/LoginHelper.java

@@ -107,7 +107,7 @@ public class LoginHelper {
         try {
             tenantId = (String) SaHolder.getStorage().get(TENANT_KEY);
             if (ObjectUtil.isNull(tenantId)) {
-                tenantId = (String) StpUtil.getExtra(TENANT_KEY);
+                tenantId = "123456";
                 SaHolder.getStorage().set(TENANT_KEY, tenantId);
             }
         } catch (Exception e) {

+ 45 - 0
iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/Config/TenantConfig.java

@@ -0,0 +1,45 @@
+package cc.iotkit.common.tenant.Config;
+
+
+import cc.iotkit.common.tenant.util.TenantContext;
+import org.springframework.lang.NonNull;
+import org.springframework.stereotype.Component;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.context.request.WebRequest;
+import org.springframework.web.context.request.WebRequestInterceptor;
+
+/**
+ * 类描述...
+ *
+ * @author Tiger Chen
+ * created on 2023/7/14 21:51
+ */
+
+
+@Component
+public class TenantConfig implements WebRequestInterceptor {
+
+
+    public static final String TENANT_ID = "tenantId";
+
+    @Override
+    public void preHandle(WebRequest request) {
+        System.out.println("dsdfsd");
+        if (request.getHeader(TENANT_ID) != null) {
+            String tenantId = request.getHeader(TENANT_ID);
+            TenantContext.setTenantId(tenantId);
+        }
+    }
+
+    @Override
+    public void postHandle(@NonNull WebRequest request, ModelMap model) {
+        TenantContext.clear();
+    }
+
+    @Override
+    public void afterCompletion(@NonNull WebRequest request, Exception ex) {
+
+    }
+
+}
+

+ 35 - 0
iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/aspect/TenantFilterAspect.java

@@ -0,0 +1,35 @@
+package cc.iotkit.common.tenant.aspect;
+
+
+import cc.iotkit.common.tenant.util.TenantContext;
+import org.aspectj.lang.annotation.AfterReturning;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.hibernate.Session;
+
+/**
+ * 类描述...
+ *
+ * @author Tiger Chen
+ * created on 2023/7/14 20:53
+ */
+
+@Aspect
+public class TenantFilterAspect {
+
+    @Pointcut("execution (* org.hibernate.internal.SessionFactoryImpl.SessionBuilderImpl.openSession(..))")
+    public void openSession() {
+    }
+
+    @AfterReturning(pointcut = "openSession()", returning = "session")
+    public void afterOpenSession(Object session) {
+        if (session != null && Session.class.isInstance(session)) {
+            final String tenantId = TenantContext.getTenantId();
+            if (tenantId != null) {
+                org.hibernate.Filter filter = ((Session) session).enableFilter("tenantFilter");
+                filter.setParameter("tenantId", tenantId);
+            }
+        }
+    }
+
+}

+ 0 - 92
iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/config/TenantConfig.java

@@ -1,92 +0,0 @@
-//package cc.iotkit.common.tenant.config;
-//
-//import cc.iotkit.common.redis.config.RedisConfig;
-//import cc.iotkit.common.tenant.core.TenantSaTokenDao;
-//import cc.iotkit.common.tenant.manager.TenantSpringCacheManager;
-//import cc.iotkit.common.tenant.properties.TenantProperties;
-//import cc.iotkit.common.utils.ReflectUtils;
-//import cn.dev33.satoken.dao.SaTokenDao;
-//import cn.hutool.core.util.ObjectUtil;
-//import org.redisson.config.ClusterServersConfig;
-//import org.redisson.config.SingleServerConfig;
-//import org.redisson.spring.starter.RedissonAutoConfigurationCustomizer;
-//import org.springframework.boot.autoconfigure.AutoConfiguration;
-//import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-//import org.springframework.boot.context.properties.EnableConfigurationProperties;
-//import org.springframework.cache.CacheManager;
-//import org.springframework.context.annotation.Bean;
-//import org.springframework.context.annotation.Primary;
-//
-//import java.util.ArrayList;
-//
-///**
-// * 租户配置类
-// *
-// * @author Lion Li
-// */
-//@EnableConfigurationProperties(TenantProperties.class)
-//@AutoConfiguration(after = {RedisConfig.class})
-//@ConditionalOnProperty(value = "tenant.enable", havingValue = "true")
-//public class TenantConfig {
-//
-//    /**
-//     * 初始化租户配置
-//     */
-//    @Bean
-//    public boolean tenantInit(MybatisPlusInterceptor mybatisPlusInterceptor,
-//                              TenantProperties tenantProperties) {
-//        List<InnerInterceptor> interceptors = new ArrayList<>();
-//        // 多租户插件 必须放到第一位
-//        interceptors.add(tenantLineInnerInterceptor(tenantProperties));
-//        interceptors.addAll(mybatisPlusInterceptor.getInterceptors());
-//        mybatisPlusInterceptor.setInterceptors(interceptors);
-//        return true;
-//    }
-//
-//    /**
-//     * 多租户插件
-//     */
-//    public TenantLineInnerInterceptor tenantLineInnerInterceptor(TenantProperties tenantProperties) {
-//        return new TenantLineInnerInterceptor(new PlusTenantLineHandler(tenantProperties));
-//    }
-//
-//    @Bean
-//    public RedissonAutoConfigurationCustomizer tenantRedissonCustomizer(RedissonProperties redissonProperties) {
-//        return config -> {
-//            TenantKeyPrefixHandler nameMapper = new TenantKeyPrefixHandler(redissonProperties.getKeyPrefix());
-//            SingleServerConfig singleServerConfig = ReflectUtils.invokeGetter(config, "singleServerConfig");
-//            if (ObjectUtil.isNotNull(singleServerConfig)) {
-//                // 使用单机模式
-//                // 设置多租户 redis key前缀
-//                singleServerConfig.setNameMapper(nameMapper);
-//                ReflectUtils.invokeSetter(config, "singleServerConfig", singleServerConfig);
-//            }
-//            ClusterServersConfig clusterServersConfig = ReflectUtils.invokeGetter(config, "clusterServersConfig");
-//            // 集群配置方式 参考下方注释
-//            if (ObjectUtil.isNotNull(clusterServersConfig)) {
-//                // 设置多租户 redis key前缀
-//                clusterServersConfig.setNameMapper(nameMapper);
-//                ReflectUtils.invokeSetter(config, "clusterServersConfig", clusterServersConfig);
-//            }
-//        };
-//    }
-//
-//    /**
-//     * 多租户缓存管理器
-//     */
-//    @Primary
-//    @Bean
-//    public CacheManager tenantCacheManager() {
-//        return new TenantSpringCacheManager();
-//    }
-//
-//    /**
-//     * 多租户鉴权dao实现
-//     */
-//    @Primary
-//    @Bean
-//    public SaTokenDao tenantSaTokenDao() {
-//        return new TenantSaTokenDao();
-//    }
-//
-//}

+ 0 - 21
iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/core/TenantDto.java

@@ -1,21 +0,0 @@
-package cc.iotkit.common.tenant.core;
-
-import cc.iotkit.common.api.BaseDto;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-/**
- * 租户基类
- *
- * @author Michelle.Chung
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class TenantDto extends BaseDto {
-
-    /**
-     * 租户编号
-     */
-    private String tenantId;
-
-}

+ 0 - 148
iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/core/TenantSaTokenDao.java

@@ -1,148 +0,0 @@
-package cc.iotkit.common.tenant.core;
-
-import cc.iotkit.common.constant.GlobalConstants;
-import cc.iotkit.common.redis.utils.RedisUtils;
-import cc.iotkit.common.satoken.core.dao.PlusSaTokenDao;
-
-import java.time.Duration;
-import java.util.List;
-
-/**
- * SaToken 认证数据持久层 适配多租户
- *
- * @author Lion Li
- */
-public class TenantSaTokenDao extends PlusSaTokenDao {
-
-    @Override
-    public String get(String key) {
-        return super.get(GlobalConstants.GLOBAL_REDIS_KEY + key);
-    }
-
-    @Override
-    public void set(String key, String value, long timeout) {
-        super.set(GlobalConstants.GLOBAL_REDIS_KEY + key, value, timeout);
-    }
-
-    /**
-     * 修修改指定key-value键值对 (过期时间不变)
-     */
-    @Override
-    public void update(String key, String value) {
-        long expire = getTimeout(key);
-        // -2 = 无此键
-        if (expire == NOT_VALUE_EXPIRE) {
-            return;
-        }
-        this.set(key, value, expire);
-    }
-
-    /**
-     * 删除Value
-     */
-    @Override
-    public void delete(String key) {
-        super.delete(GlobalConstants.GLOBAL_REDIS_KEY + key);
-    }
-
-    /**
-     * 获取Value的剩余存活时间 (单位: 秒)
-     */
-    @Override
-    public long getTimeout(String key) {
-        return super.getTimeout(GlobalConstants.GLOBAL_REDIS_KEY + key);
-    }
-
-    /**
-     * 修改Value的剩余存活时间 (单位: 秒)
-     */
-    @Override
-    public void updateTimeout(String key, long timeout) {
-        // 判断是否想要设置为永久
-        if (timeout == NEVER_EXPIRE) {
-            long expire = getTimeout(key);
-            if (expire == NEVER_EXPIRE) {
-                // 如果其已经被设置为永久,则不作任何处理
-            } else {
-                // 如果尚未被设置为永久,那么再次set一次
-                this.set(key, this.get(key), timeout);
-            }
-            return;
-        }
-        RedisUtils.expire(GlobalConstants.GLOBAL_REDIS_KEY + key, Duration.ofSeconds(timeout));
-    }
-
-
-    /**
-     * 获取Object,如无返空
-     */
-    @Override
-    public Object getObject(String key) {
-        return super.getObject(GlobalConstants.GLOBAL_REDIS_KEY + key);
-    }
-
-    /**
-     * 写入Object,并设定存活时间 (单位: 秒)
-     */
-    @Override
-    public void setObject(String key, Object object, long timeout) {
-        super.setObject(GlobalConstants.GLOBAL_REDIS_KEY + key, object, timeout);
-    }
-
-    /**
-     * 更新Object (过期时间不变)
-     */
-    @Override
-    public void updateObject(String key, Object object) {
-        long expire = getObjectTimeout(key);
-        // -2 = 无此键
-        if (expire == NOT_VALUE_EXPIRE) {
-            return;
-        }
-        this.setObject(key, object, expire);
-    }
-
-    /**
-     * 删除Object
-     */
-    @Override
-    public void deleteObject(String key) {
-        super.deleteObject(GlobalConstants.GLOBAL_REDIS_KEY + key);
-    }
-
-    /**
-     * 获取Object的剩余存活时间 (单位: 秒)
-     */
-    @Override
-    public long getObjectTimeout(String key) {
-        return super.getObjectTimeout(GlobalConstants.GLOBAL_REDIS_KEY + key);
-    }
-
-    /**
-     * 修改Object的剩余存活时间 (单位: 秒)
-     */
-    @Override
-    public void updateObjectTimeout(String key, long timeout) {
-        // 判断是否想要设置为永久
-        if (timeout == NEVER_EXPIRE) {
-            long expire = getObjectTimeout(key);
-            if (expire == NEVER_EXPIRE) {
-                // 如果其已经被设置为永久,则不作任何处理
-            } else {
-                // 如果尚未被设置为永久,那么再次set一次
-                this.setObject(key, this.getObject(key), timeout);
-            }
-            return;
-        }
-        RedisUtils.expire(GlobalConstants.GLOBAL_REDIS_KEY + key, Duration.ofSeconds(timeout));
-    }
-
-
-    /**
-     * 搜索数据
-     */
-    @Override
-    public List<String> searchData(String prefix, String keyword, int start, int size, boolean sortType) {
-        return super.searchData(GlobalConstants.GLOBAL_REDIS_KEY + prefix, keyword, start, size, sortType);
-    }
-}

+ 44 - 0
iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/dao/AbstractBaseEntity.java

@@ -0,0 +1,44 @@
+package cc.iotkit.common.tenant.dao;
+
+
+import cc.iotkit.common.tenant.listener.TenantListener;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import org.hibernate.annotations.Filter;
+import org.hibernate.annotations.FilterDef;
+import org.hibernate.annotations.ParamDef;
+
+import javax.persistence.Column;
+import javax.persistence.EntityListeners;
+import javax.persistence.MappedSuperclass;
+import javax.validation.constraints.Size;
+import java.io.Serializable;
+
+/**
+ * 类描述...
+ *
+ * @author Tiger Chen
+ * created on 2023/7/14 20:47
+ */
+
+@MappedSuperclass
+@Getter
+@Setter
+@NoArgsConstructor
+@FilterDef(name = "tenantFilter", parameters = {@ParamDef(name = "tenantId", type = "string")})
+@Filter(name = "tenantFilter", condition = "tenant_id = :tenantId")
+@EntityListeners(TenantListener.class)
+public abstract class AbstractBaseEntity implements TenantAware, Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @Size(max = 64)
+    @Column(name = "tenant_id")
+    private String tenantId;
+
+    public AbstractBaseEntity(String tenantId) {
+        this.tenantId = tenantId;
+    }
+
+}
+

+ 1 - 1
iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/dao/entiry/TenantAware.java → iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/dao/TenantAware.java

@@ -1,4 +1,4 @@
-package cc.iotkit.common.tenant.dao.entiry;
+package cc.iotkit.common.tenant.dao;
 
 public interface TenantAware {
     void setTenantId(String tenantId);

+ 0 - 55
iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/handle/PlusTenantLineHandler.java

@@ -1,55 +0,0 @@
-//package cc.iotkit.common.tenant.handle;
-//
-//import cc.iotkit.common.satoken.utils.LoginHelper;
-//import cc.iotkit.common.tenant.helper.TenantHelper;
-//import cc.iotkit.common.tenant.properties.TenantProperties;
-//import cc.iotkit.common.utils.StringUtils;
-//import cn.hutool.core.collection.ListUtil;
-//import lombok.AllArgsConstructor;
-//
-//import java.util.List;
-//
-///**
-// * 自定义租户处理器
-// *
-// * @author Lion Li
-// */
-//@AllArgsConstructor
-//public class PlusTenantLineHandler implements TenantLineHandler {
-//
-//    private final TenantProperties tenantProperties;
-//
-//    @Override
-//    public Expression getTenantId() {
-//        String tenantId = LoginHelper.getTenantId();
-//        if (StringUtils.isBlank(tenantId)) {
-//            return new NullValue();
-//        }
-//        String dynamicTenantId = TenantHelper.getDynamic();
-//        if (StringUtils.isNotBlank(dynamicTenantId)) {
-//            // 返回动态租户
-//            return new StringValue(dynamicTenantId);
-//        }
-//        // 返回固定租户
-//        return new StringValue(tenantId);
-//    }
-//
-//    @Override
-//    public boolean ignoreTable(String tableName) {
-//        String tenantId = LoginHelper.getTenantId();
-//        // 判断是否有租户
-//        if (StringUtils.isNotBlank(tenantId)) {
-//            // 不需要过滤租户的表
-//            List<String> excludes = tenantProperties.getExcludes();
-//            // 非业务表
-//            List<String> tables = ListUtil.toList(
-//                "gen_table",
-//                "gen_table_column"
-//            );
-//            tables.addAll(excludes);
-//            return tables.contains(tableName);
-//        }
-//        return true;
-//    }
-//
-//}

+ 0 - 59
iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/handle/TenantKeyPrefixHandler.java

@@ -1,59 +0,0 @@
-//package cc.iotkit.common.tenant.handle;
-//
-//
-//import cc.iotkit.common.constant.GlobalConstants;
-//import cc.iotkit.common.redis.handler.KeyPrefixHandler;
-//import cc.iotkit.common.tenant.helper.TenantHelper;
-//import cc.iotkit.common.utils.StringUtils;
-//
-///**
-// * 多租户redis缓存key前缀处理
-// *
-// * @author Lion Li
-// */
-//public class TenantKeyPrefixHandler extends KeyPrefixHandler {
-//
-//    public TenantKeyPrefixHandler(String keyPrefix) {
-//        super(keyPrefix);
-//    }
-//
-//    /**
-//     * 增加前缀
-//     */
-//    @Override
-//    public String map(String name) {
-//        if (StringUtils.isBlank(name)) {
-//            return null;
-//        }
-//        if (StringUtils.contains(name, GlobalConstants.GLOBAL_REDIS_KEY)) {
-//            return super.map(name);
-//        }
-//        String tenantId = TenantHelper.getTenantId();
-//        if (StringUtils.startsWith(name, tenantId)) {
-//            // 如果存在则直接返回
-//            return super.map(name);
-//        }
-//        return super.map(tenantId + ":" + name);
-//    }
-//
-//    /**
-//     * 去除前缀
-//     */
-//    @Override
-//    public String unmap(String name) {
-//        String unmap = super.unmap(name);
-//        if (StringUtils.isBlank(unmap)) {
-//            return null;
-//        }
-//        if (StringUtils.contains(name, GlobalConstants.GLOBAL_REDIS_KEY)) {
-//            return super.unmap(name);
-//        }
-//        String tenantId = TenantHelper.getTenantId();
-//        if (StringUtils.startsWith(unmap, tenantId)) {
-//            // 如果存在则删除
-//            return unmap.substring((tenantId + ":").length());
-//        }
-//        return unmap;
-//    }
-//
-//}

+ 13 - 6
iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/interceptor/TenantInterceptor.java

@@ -1,21 +1,28 @@
 package cc.iotkit.common.tenant.interceptor;
 
+
 import cc.iotkit.common.tenant.util.TenantContext;
-import lombok.extern.slf4j.Slf4j;
+import org.springframework.lang.NonNull;
 import org.springframework.stereotype.Component;
 import org.springframework.ui.ModelMap;
 import org.springframework.web.context.request.WebRequest;
 import org.springframework.web.context.request.WebRequestInterceptor;
 
+/**
+ * 类描述...
+ *
+ * @author Tiger Chen
+ * created on 2023/7/14 20:51
+ */
+
 @Component
-@Slf4j
 public class TenantInterceptor implements WebRequestInterceptor {
 
-    public static final String TENANT_ID = "TENANT-ID";
-
+    public static final String TENANT_ID = "tenantId";
 
     @Override
     public void preHandle(WebRequest request) {
+        System.out.println("TenantInterceptor: preHandle");
         if (request.getHeader(TENANT_ID) != null) {
             String tenantId = request.getHeader(TENANT_ID);
             TenantContext.setTenantId(tenantId);
@@ -23,12 +30,12 @@ public class TenantInterceptor implements WebRequestInterceptor {
     }
 
     @Override
-    public void postHandle(WebRequest request, ModelMap model) {
+    public void postHandle(@NonNull WebRequest request, ModelMap model) {
         TenantContext.clear();
     }
 
     @Override
-    public void afterCompletion(WebRequest request, Exception ex) {
+    public void afterCompletion(@NonNull WebRequest request, Exception ex) {
 
     }
 }

+ 13 - 3
iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/listener/TenantListener.java

@@ -1,18 +1,28 @@
 package cc.iotkit.common.tenant.listener;
 
-import cc.iotkit.common.tenant.dao.entiry.TenantAware;
-import cc.iotkit.common.tenant.util.TenantContext;
+
+import cc.iotkit.common.satoken.utils.LoginHelper;
+import cc.iotkit.common.tenant.dao.TenantAware;
 
 import javax.persistence.PrePersist;
 import javax.persistence.PreRemove;
 import javax.persistence.PreUpdate;
 
+/**
+ * 类描述...
+ *
+ * @author Tiger Chen
+ * created on 2023/7/14 20:50
+ */
+
 public class TenantListener {
+
     @PreUpdate
     @PreRemove
     @PrePersist
     public void setTenant(TenantAware entity) {
-        final String tenantId = TenantContext.getTenantId();
+
+        final String tenantId = LoginHelper.getTenantId();
         entity.setTenantId(tenantId);
     }
 }

+ 0 - 32
iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/manager/TenantSpringCacheManager.java

@@ -1,32 +0,0 @@
-//package cc.iotkit.common.tenant.manager;
-//
-//import cc.iotkit.common.constant.GlobalConstants;
-//import cc.iotkit.common.redis.manager.PlusSpringCacheManager;
-//import cc.iotkit.common.tenant.helper.TenantHelper;
-//import cc.iotkit.common.utils.StringUtils;
-//import org.springframework.cache.Cache;
-//
-///**
-// * 重写 cacheName 处理方法 支持多租户
-// *
-// * @author Lion Li
-// */
-//public class TenantSpringCacheManager extends PlusSpringCacheManager {
-//
-//    public TenantSpringCacheManager() {
-//    }
-//
-//    @Override
-//    public Cache getCache(String name) {
-//        if (StringUtils.contains(name, GlobalConstants.GLOBAL_REDIS_KEY)) {
-//            return super.getCache(name);
-//        }
-//        String tenantId = TenantHelper.getTenantId();
-//        if (StringUtils.startsWith(name, tenantId)) {
-//            // 如果存在则直接返回
-//            return super.getCache(name);
-//        }
-//        return super.getCache(tenantId + ":" + name);
-//    }
-//
-//}

+ 0 - 27
iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/properties/TenantProperties.java

@@ -1,27 +0,0 @@
-package cc.iotkit.common.tenant.properties;
-
-import lombok.Data;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-
-import java.util.List;
-
-/**
- * 租户 配置属性
- *
- * @author Lion Li
- */
-@Data
-@ConfigurationProperties(prefix = "tenant")
-public class TenantProperties {
-
-    /**
-     * 是否启用
-     */
-    private Boolean enable;
-
-    /**
-     * 排除表
-     */
-    private List<String> excludes;
-
-}

+ 11 - 5
iot-common/iot-common-tenant/src/main/java/cc/iotkit/common/tenant/util/TenantContext.java

@@ -1,21 +1,27 @@
 package cc.iotkit.common.tenant.util;
 
+/**
+ * 类描述...
+ *
+ * @author Tiger Chen
+ * created on 2023/7/14 20:49
+ */
+
 public class TenantContext {
     private TenantContext() {
     }
 
-    private static final ThreadLocal<String> tenantInfoHolder = new InheritableThreadLocal<>();
+    private static final InheritableThreadLocal<String> currentTenant = new InheritableThreadLocal<>();
 
     public static void setTenantId(String tenantId) {
-        tenantInfoHolder.set(tenantId);
+        currentTenant.set(tenantId);
     }
 
     public static String getTenantId() {
-        return tenantInfoHolder.get();
+        return currentTenant.get();
     }
 
     public static void clear() {
-        tenantInfoHolder.remove();
+        currentTenant.remove();
     }
-
 }

+ 2 - 1
iot-module/iot-system/src/main/java/cc/iotkit/system/controller/SysTenantController.java

@@ -91,7 +91,8 @@ public class SysTenantController extends BaseController {
         if (!tenantService.checkCompanyNameUnique(data)) {
             fail("新增租户'" + data.getCompanyName() + "'失败,企业名称已存在");
         }
-        //TenantHelper.ignore(() -> tenantService.insertByBo(bo));
+        tenantService.insertByBo(data);
+
     }
 
     /**

+ 3 - 2
iot-module/iot-system/src/main/java/cc/iotkit/system/service/impl/SysTenantServiceImpl.java

@@ -57,7 +57,8 @@ public class SysTenantServiceImpl implements ISysTenantService {
 
     @Override
     public Boolean insertByBo(SysTenantBo bo) {
-        return false;
+        SysTenant save = sysTenantData.save(bo.to(SysTenant.class));
+        return true;
     }
 
     @Override
@@ -82,7 +83,7 @@ public class SysTenantServiceImpl implements ISysTenantService {
 
     @Override
     public boolean checkCompanyNameUnique(SysTenantBo bo) {
-        return false;
+        return true;
     }
 
     @Override

+ 2 - 2
iot-starter/src/main/java/cc/iotkit/Application.java

@@ -26,8 +26,8 @@ import org.springframework.web.servlet.config.annotation.EnableWebMvc;
 public class Application {
 
     public static void main(String[] args) {
-        //System.setProperty("disabledEmbeddedEs","true");
-        //System.setProperty("disabledEmbeddedRedis","true");
+        System.setProperty("disabledEmbeddedEs", "true");
+        System.setProperty("disabledEmbeddedRedis", "true");
         if (EmbeddedElasticSearchConfig.embeddedEnable()) {
             EmbeddedElasticSearchConfig.startEmbeddedElasticSearch();
         }