![](/img/trans.png)
[英]Spring <http> namespace seems to cause all non-role based pages to be allowed
[英]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.