41 lines
1.3 KiB
Java
41 lines
1.3 KiB
Java
package eu.eudat.data.tenant;
|
|
|
|
import eu.eudat.commons.scope.tenant.TenantScope;
|
|
import jakarta.persistence.EntityManager;
|
|
import org.aspectj.lang.JoinPoint;
|
|
import org.aspectj.lang.annotation.AfterReturning;
|
|
import org.aspectj.lang.annotation.Aspect;
|
|
import org.hibernate.Session;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
import javax.management.InvalidApplicationException;
|
|
|
|
|
|
//@Aspect
|
|
@Component
|
|
public class TenantFilterAspect {
|
|
|
|
private final TenantScope tenantScope;
|
|
|
|
@Autowired
|
|
public TenantFilterAspect(
|
|
TenantScope tenantScope
|
|
) {
|
|
this.tenantScope = tenantScope;
|
|
}
|
|
|
|
@AfterReturning(
|
|
pointcut = "bean(entityManagerFactory) && execution(* createEntityManager(..))",
|
|
returning = "retVal")
|
|
public void getSessionAfter(JoinPoint joinPoint, Object retVal) throws InvalidApplicationException {
|
|
if (retVal != null && retVal instanceof EntityManager && tenantScope.isSet()) {
|
|
Session session = ((EntityManager) retVal).unwrap(Session.class);
|
|
session
|
|
.enableFilter(TenantScopedBaseEntity.tenantFilter)
|
|
.setParameter(TenantScopedBaseEntity.tenantFilterTenantParam, tenantScope.getTenant().toString());
|
|
}
|
|
}
|
|
|
|
}
|