![](/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.