我试图用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过滤器?
发布于 2018-06-27 10:40:05
使用hibernate过滤器,即使在我们的应用程序中,行级ACL也可以很容易地实现多协议。您可以使用AOP和数据库中可配置的不同过滤器来代替描述器。在调用基于访问用户的请求方法之前,应用过滤器,即启用hibernate会话筛选器并退出请求,并在成功处理请求之后禁用筛选器。就这样。通过这种方式,您可以将任意数量的筛选器添加到由当前用户操作的任意数量的实体中,并且可以使用此方法进行完美的资源(实体和CRUD)管理。
https://stackoverflow.com/questions/30132489
复制相似问题