Spring数据jpa - 在执行之前修改查询

时间:2014-03-28 11:57:00

标签: spring-data spring-data-jpa

我正在开发一个项目,在数据库中保存一些访问控制信息。我们正在使用该访问控制信息来过滤用户可以看到的内容。我们使用的过滤器基于用户拥有的角色。我们希望使用Spring Data提供的Repository抽象,但我们希望能够在生成的查询执行之前调整它们。有没有办法在执行查询之前附加将被调用的侦听器或拦截器?这样我们就可以获得对查询对象的引用,并在执行查询之前对查询进行任何调整。

我们正在考虑做的是创建我们自己的JpaRepositoryFactoryBean,以便我们可以按照here描述覆盖SimpleJpaRepository。我们将覆盖SimpleJpaRepository.getQuery来调整查询。然后,对于所有生成的finder方法,我们考虑扩展PartTreeJpaQuery并覆盖PartTreeJpaQuery $ QueryPreparer。在QueryPreparer中,我们将覆盖QueryPreparer.createQuery方法。我们不确定这是否是在执行之前访问所有查询的最简单方法。

我们考虑过添加一个org.springframework.data.repository.core.support.QueryCreationListener,但它只会在创建查询时执行。我认为我们需要一些更有活力的东西。

1 个答案:

答案 0 :(得分:1)

我不确定您是否已经知道,但是Spring Data团队正在为下一个版本开发该功能,以便Spring Security Team可以添加对ACL的支持。

Add infrastructure for generic query augmentation

以前被Spring Security / Spring Data Acl Integration

阻止的Spring Security问题

在我的公司,我们创建了一个JpaRepositoryFactoryBean,它将创建一个自定义Repository以允许我们为ACL添加过滤器,但我们只是为findAll和findOne方法做了这些,所以我们失去了很多Spring的功能数据并决定恢复这一变化,我们仍在考虑自动完成这项工作。如果我们发现它太难了,我认为我们会将这个责任委托给存储库的客户端,并在Spring Security / Data中等待它的支持。

最初的问题已经有1年了。你找到了一个干净的方法吗?