我是新来的 @Filter
我也知道,和 @Where
.
我有一个用例,在这个用例中,我需要根据登录的日志过滤每个端点的结果 User
.
在搜索如何全局启用过滤时,我遇到了一个解决方案,在该解决方案中,aop用于拦截会话创建,并启用似乎运行良好的过滤器。
这里的问题是,在启用过滤器时,需要将用户id作为参数发送进来。我该怎么做,或者对于这个特定的场景有其他的选择吗?
@Aspect
@Component
public class EnableFilterAspect {
@AfterReturning(pointcut = "bean(entityManagerFactory) && execution(* createEntityManager(..))",
returning = "retVal")
public void getSessionAfter(JoinPoint joinPoint, Object retVal) {
if (retVal != null && EntityManager.class.isInstance(retVal)) {
Session session = ((EntityManager) retVal).unwrap(Session.class);
session.enableFilter("authorize").setParameter("userId",**USER_ID**);
}
}
}
1条答案
按热度按时间1u4esq0p1#
您必须将用户id存储在线程局部变量中,并在方面中使用它。不确定过滤器的作用,但也许多租户更符合您想要实现的目标。不过,解决方案没有太大变化,您必须通过线程局部变量以某种方式发布用户id。