2014-03-28 74 views
4

我正在處理一個項目,該項目在數據庫中保留一些訪問控制信息。我們正在使用該訪問控制信息來過濾用戶可以看到的內容。我們使用的過濾器基於用戶擁有的角色。我們希望使用Spring Data提供的Repository抽象,但我們希望能夠在生成的查詢執行之前對其進行調整。有沒有方法來附加一個偵聽器或攔截器,將執行查詢之前將被調用?這樣我們就可以獲得對查詢對象的引用,並對查詢執行前我們需要的查詢做出任何調整。彈簧數據jpa - 在執行前修改查詢

我們想要做的是創建我們自己的JpaRepositoryFactoryBean,所以我們可以覆蓋SimpleJpaRepository,如here所述。我們將重寫SimpleJpaRepository.getQuery來對查詢進行調整。然後,對於所有生成的查找器方法,我們正在考慮擴展PartTreeJpaQuery並重寫PartTreeJpaQuery $ QueryPreparer。在QueryPreparer中,我們將重寫QueryPreparer.createQuery方法。我們不確定這是否是在執行之前訪問所有查詢的最簡單方法。

我們考慮添加org.springframework.data.repository.core.support.QueryCreationListener,但只有在創建查詢時纔會執行它。我認爲我們需要更有活力的東西。

回答

1

我不確定您是否已經知道,但Spring Data團隊正在爲下一個版本開發該功能,以便Spring Security Team能夠爲ACL添加支持。

Add infrastructure for generic query augmentation

由阻塞

春季安全問題以前:Spring Security/Spring Data Acl Integration

在我的公司,我們創建了一個將創建一個自定義庫,使我們能夠添加過濾器的ACL一個JpaRepositoryFactoryBean,但我們只是爲findAll和findOne方法做了這些工作,所以我們放棄了Spring Data的許多特性,並決定恢復這些變化,並且我們仍然在想辦法自動完成。如果我們發現它太困難了,我認爲我們會將這個責任委託給存儲庫的客戶端,並等待Spring Security/Data中的支持。

原來的問題已經有1年了。你找到一個乾淨的方法來做到這一點?