Java 使用spring boot全局启用hibernate筛选器&;弹簧数据

Java 使用spring boot全局启用hibernate筛选器&;弹簧数据,java,hibernate,spring-boot,spring-data,spring-data-jpa,Java,Hibernate,Spring Boot,Spring Data,Spring Data Jpa,我试图用Spring引导和Spring数据通过鉴别器实现多租户 我制作了一个抽象类来表示多租户实体。类似于此: @MappedSuperclass @FilterDefs({@FilterDef(name = "multi-tenant", parameters = {@ParamDef(name = "tenant", type = "string")})}) @Filter(name = "multi-tenant", condition = "tenant = :tenant") publ

我试图用Spring引导和Spring数据通过鉴别器实现多租户

我制作了一个抽象类来表示多租户实体。类似于此:

@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;
    }
}
如何全局启用多租户休眠过滤器


在我们的应用程序中,使用hibernate过滤器很容易实现多租户,即使对于行级ACL也是如此。
您可以使用AOP和数据库中可配置的不同过滤器,而不是discrimators。在根据访问用户调用请求方法之前,应用启用hibernate会话筛选器并执行请求的筛选器,并在成功处理请求后禁用筛选器。就这样。使用这种方式,您可以将任意数量的过滤器添加到当前用户将要操作的任意数量的实体中,并且您可以使用这种方式进行完美的资源(实体和CRUD)管理。

如果有人对如何使用spring数据按列进行多租户有更好的了解,我也愿意接受建议。即使不使用hibernate过滤器。你有没有找到一个希望仍然是最新的好解决方案?不幸的是,没有。现在,一年后,你终于找到了一个解决方案?我处于同样的情况下,无法使其工作…使用AOP