簡體   English   中英

Spring Boot MVC基於非角色的安全性

[英]Spring Boot MVC non-role based security

我正在嘗試在新的Spring Boot MVC應用程序中設置安全性。 我正在嘗試沒有XML配置,只有Java。 目前,我已經可以在每個@RequestMapping方法上使用@Secured批注來獲得基於角色的安全性。

我還需要添加基於對象的安全性,例如:

用戶已被授予對小部件ID 456和689的訪問權限,並且無法訪問任何其他小部件。 顯然,這不是使用基於角色的安全性可以完成的事情,因為從理論上講,各種用戶可以訪問的不同小部件的數量不受限制。

為此,據我了解,我需要創建新的AccessDecisionVoter和GrantedAuthority實現,以確定用戶是否具有訪問小部件的適當權限。

不幸的是,我無法確定該如何實現,我正在尋找任何描述如何基於類似要求設置安全性的示例。

也許@PreAuthorize或@PostAuthorize對您來說就足夠了,這取決於您究竟需要什么。 您可以嘗試如下操作:

@PostAuthorize("returnObject.widget.owner.id == principal.id")
public Widget getWidgetById(long id) {
   // ...
return widget;
}

更新

從Spring Security 3.0開始,您可以使用Pre / Post Authorize,正如您所說的,它提供了@Secured之外的更多高級功能。 在前/后注釋中,可以使用SpeL(Spring表達式語言)。

如果要使用前/后注釋,則需要在配置中使用:

<global-method-security pre-post-annotations="enabled" />

示例 :讓具有ROLE_USER的用戶添加文本字段的帖子少於140個字符,讓具有ROLE_PREMIUM角色的用戶添加任意​​長度的帖子

@PreAuthorize("(hasRole('ROLE_USER') and #post.text.length() <= 140)
  or hasRole('ROLE_PREMIUM')")

如果Spring Security批注和Spel中的任何一項都不允許您制定所需的訪問規則,則還可以在PreAuthorize中使用自定義方法(但我實際上不知道這是否是一種好習慣):

@PreAuthorize("hasRole('ROLE_ADMIN') 
or @mySecurityService.isPostOwner(#post_id, principal.id))")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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