[英]Spring Security Authorization
我有一個Spring Web服務,用戶只能訪問特定資源。 任何用戶都可以請求獲取資源信息,但是如果他們無權訪問該資源,則需要拋出一個Authorization異常。 API如下:
GET /resources/{resourceId}
上面的API為用戶提供了有關給定資源的所有信息。
目前,我使用WebSecurityConfigurerAdapter
進行身份驗證。 為了添加授權,我發現可以將授予的授權設置為Authentication對象的一部分。 這樣做時,我可以使用類似@PreAuthorize("hasRole('ROLE_USER')")
方法進行授權。
但是,對於所提到的API,由於以下原因,我不確定所提到的授權方法是否適合。
resourceId
特權進行授權。 這不完全是角色。 更像是特權。 在此用例中使用hasRole()
是否仍然可以接受? hasRole()
批注,則需要執行類似@PreAuthorize("hasRole('ACCESS_RESOURCEID12346')")
,其中RESOURCEID12346
是resourceId
。 但是,只有進入API控制器后,我們才能訪問resourceId
。 那么,如何使用該值作為授權注釋? 如果指定的方法不是解決問題的最佳方法,那么我將不勝感激,對最好的方法進行任何輸入/反饋。 我想避免在控制器中執行此檢查。 我正在嘗試通過類似於@PreAuthorize的工作原理通過Spring Security進行操作。 我認為訪問resourceId是一項授權要求,如果用戶無權訪問該資源,我們甚至不應該進入API控制器。
通過綁定到資源ID的角色來分配權限似乎是潛在的維護噩夢。 如果您不想允許訪問控制器,則最好使用access
。
上面的鏈接提供了基於Java和xml的配置示例,並顯示了如何在進入控制器之前獲得對路徑的訪問。
您將提供一種您引用的方法,例如:
boolean checkResourceAccess(Principal principal, int resourceId)
在配置中,您引用url參數,例如#resourceId
將其映射到{resourceId}
。
Java配置示例:
http.authorizeRequests()
.antMatchers("/resources/{resourceId}")
.access("@yourBean.checkResourceAccess(principal,#resourceId)")...
在這種方法中,您可以提供確定用戶訪問權限所需的任何邏輯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.