【发布时间】:2014-03-28 11:56:59
【问题描述】:
我正在进行一个项目,该项目将一些访问控制信息保存在数据库中。我们正在使用该访问控制信息来过滤用户可以看到的内容。我们使用的过滤器基于用户拥有的角色。我们希望使用 Spring Data 提供的 Repository 抽象,但我们希望能够在生成的查询被执行之前对其进行调整。有没有办法附加在执行查询之前将调用的侦听器或拦截器?这样我们就可以获得对查询对象的引用,并在执行查询之前对查询进行任何我们需要的调整。
我们正在考虑创建自己的 JpaRepositoryFactoryBean,以便我们可以覆盖 SimpleJpaRepository,如 here 所述。我们将覆盖 SimpleJpaRepository.getQuery 以调整查询。然后对于所有生成的查找器方法,我们正在考虑扩展 PartTreeJpaQuery 并覆盖 PartTreeJpaQuery$QueryPreparer。在 QueryPreparer 中,我们将覆盖 QueryPreparer.createQuery 方法。我们不确定这是否是在所有查询被执行之前访问它们的最简单方法。
我们考虑过添加一个 org.springframework.data.repository.core.support.QueryCreationListener,但它只会在创建查询时执行。我认为我们需要一些更有活力的东西。
【问题讨论】:
标签: spring-data spring-data-jpa