使用 Spring Security 的 @Secured 注释中是不是允许多个角色

Posted

技术标签:

【中文标题】使用 Spring Security 的 @Secured 注释中是不是允许多个角色【英文标题】:Are multiple roles allowed in the @Secured annotation with Spring Security使用 Spring Security 的 @Secured 注释中是否允许多个角色 【发布时间】:2011-12-16 14:49:53 【问题描述】:

我想允许多个用户组访问特定方法。在 Spring Security 3.x 中是否可以使用 @Secured 注释来做这样的事情?考虑两组(角色)操作员和用户,此代码是否有效:

    @Secured("ROLE_OPERATOR", "ROLE_USER")
    public void doWork() 
        // do useful processing
    

【问题讨论】:

【参考方案1】:

你快到了。从语法上讲,你需要这样写:

@Secured("ROLE_OPERATOR", "ROLE_USER")
public void doWork()  ... 

这是因为您为注解的单个数组属性提供了多个值。 (Java 在语法上是处理单个值的特殊情况,但现在您需要“正确地”这样做。)

【讨论】:

... 具体来说,这是一个(包括)OR,对吧?如果您是 ROLE_OPERATOR、 ROLE_USER、两者,您将获得授权。这不是AND【参考方案2】:

@Donal Fellows 的回答对于 Spring 应用程序是正确的。但是,如果您在 Grails 中工作,则需要对列表使用 Groovy 语法,以便代码如下所示

@Secured(["ROLE_OPERATOR", "ROLE_USER"])
public void doWork()  ... 

【讨论】:

人真棒

以上是关于使用 Spring Security 的 @Secured 注释中是不是允许多个角色的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Security thymeleaf sec 中使用列表:授权标签

sec:authorize 对 Spring Security 不起作用

Spring Security Role Hierarchy 不适用于 Thymeleaf sec:authorize

<sec:authorize ifAnyGranted 或 ifAnyGranted 在 SPRING SECURITY 中不起作用

sec:authentication 在 Spring Boot Security 中不起作用

Spring Boot Security - Thymeleaf sec:授权不起作用