java—有没有一种方法可以全局启用@filter,同时将登录的用户id作为参数?

xiozqbni  于 2021-07-14  发布在  Java
关注(0)|答案(1)|浏览(253)

我是新来的 @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**);
        }
    }
}
1u4esq0p

1u4esq0p1#

您必须将用户id存储在线程局部变量中,并在方面中使用它。不确定过滤器的作用,但也许多租户更符合您想要实现的目标。不过,解决方案没有太大变化,您必须通过线程局部变量以某种方式发布用户id。

相关问题