![](/img/trans.png)
[英]Understanding the Spring Data JPA @NoRepositoryBean interface
[英]PreAuthorize issue on common spring NoRepositoryBean base interface
我正在嘗試編寫一個通用的SecurePagingAndSorting存儲庫,該存儲庫將檢查CRUD操作的安全性,以節省在所有JPA存儲庫中重復相同的PreAuthorize(具有不同的權限)。
下面是一個簡單的示例:
@NoRepositoryBean
public interface SecuredPagingAndSortingRepository<T, ID extends Serializable> extends PagingAndSortingRepository<T, ID> {
@Override
@PreAuthorize("hasPermission(#id, domainType, 'delete'))
void delete(ID id);
}
現在是問題所在的domainType參數,因為這是一個通用接口,所以不能進行硬編碼。 從SecurePagingRepository派生的存儲庫中獲取域類型的最佳方法是什么?
我看到的最好的解決方案是編寫自己的PermissionEvaluator
接口實現,然后將其注入安全性上下文中,以替換默認的實現。
如果您嘗試這種方式,擴展類AclPermissionEvaluator
將為您節省許多已經由Spring管理的代碼,並確保向后兼容。
最后,我確定了這個解決方案。 PreAuthorize可以使用@字符在Spel表達式中使用任何bean。
@Override
@PreAuthorize("hasPermission(#id, @security.getDeletePermission(#id,#this.this)))
void delete(ID id);
}
因此,當調用“安全性” bean的getDeletePermission函數時,#this.this參數將轉換為相關的SimpleJpaRepository。 這使我們能夠確定有問題的具體存儲庫並返回所需的權限名稱
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.