java - 使用 spring-boot 和 spring-data 全局启用 hibernate 过滤器

标签 java hibernate spring-boot spring-data spring-data-jpa

我正在尝试通过使用 Spring Boot 和 Spring Data 的鉴别器实现来实现 Multi-Tenancy 。

我创建了一个抽象类来表示 Multi-Tenancy 实体。类似这样的东西:

@MappedSuperclass
@FilterDefs({@FilterDef(name = "multi-tenant", parameters = {@ParamDef(name = "tenant", type = "string")})})
@Filter(name = "multi-tenant", condition = "tenant = :tenant")
public abstract class MultiTenantEntity extends GenericEntity {
    @Transient
    private transient String savedTenant;

    @PostLoad
    private void onLoad() throws Exception {
        this.savedTenant = this.tenant;
        onEntityModification();
    }

    @PrePersist
    private void onPersist() {
        if (getId() == null || getId().equals(0l)) {
            tenant = SecurityUtil.getCurrentTenant();
        }
    }

    @PreUpdate
    @PreRemove
    private void onEntityModification() throws Exception {
        String currentTenant = SecurityUtil.getCurrentTenant();

        if (!currentTenant.equals(tenant) || !savedTenant.equals(tenant)) {
            throw new Exception();
        }
    }

    @NotNull
    private String tenant;

    public String getTenant() {
        return tenant;
    }
}

How do I enable the multi-tenant hibernate filter globally?

最佳答案

使用 hibernate 过滤器可以很容易地实现 Multi-Tenancy ,即使对于行级 ACL 也可以在我们的应用程序中实现。 您可以使用 AOP 和数据库中可配置的不同过滤器来代替鉴别器。在根据访问用户调用您的请求方法之前,应用启用 hibernate session 过滤器的过滤器并执行请求,并在成功请求处理后禁用过滤器。而已。使用这种方式,您可以将任意数量的过滤器添加到将由当前用户操作的任意数量的实体,并且您可以使用它进行完美的资源(实体和 CRUD)管理。

关于java - 使用 spring-boot 和 spring-data 全局启用 hibernate 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30132489/

相关文章:

java - 编译时 SQL 中的单个代码问题

java - 在 Hibernate 中使用多个列表

java - JpaRepository 在角色列表中查找具有角色的用户

java - @Autowire JpaRepository 接口(interface)类错误限定 bean

spring-boot - 如何禁用 Javers 进行集成测试?

java - Spring应用程序Thymeleaf中的css问题

java - 我们在 Karate 中有类似@AfterScenario 的东西吗?

java - 简单Java : How to make string replace and wait then replace again?

java - 运行一些总堆大小内存设置为大于物理内存的 Java 应用程序

java - Hibernate Envers 审计 @Embedded 内有基本类型 throws 无法在获取时将字段设置为空值