簡體   English   中英

常見的Spring NoRepositoryBean基本接口上的PreAuthorize問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM