簡體   English   中英

春季安全授權

[英]Spring Security Authorization

我有一個Spring Web服務,用戶只能訪問特定資源。 任何用戶都可以請求獲取資源信息,但是如果他們無權訪問該資源,則需要拋出一個Authorization異常。 API如下:

GET /resources/{resourceId}

上面的API為用戶提供了有關給定資源的所有信息。

目前,我使用WebSecurityConfigurerAdapter進行身份驗證。 為了添加授權,我發現可以將授予的授權設置為Authentication對象的一部分。 這樣做時,我可以使用類似@PreAuthorize("hasRole('ROLE_USER')")方法進行授權。

但是,對於所提到的API,由於以下原因,我不確定所提到的授權方法是否適合。

  1. 我根據用戶是否具有訪問特定resourceId特權進行授權。 這不完全是角色。 更像是特權。 在此用例中使用hasRole()是否仍然可以接受?
  2. 如果確實使用hasRole()批注,則需要執行類似@PreAuthorize("hasRole('ACCESS_RESOURCEID12346')") ,其中RESOURCEID12346resourceId 但是,只有進入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.

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