Spring安全注释预期为内联常量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring安全注释预期为内联常量相关的知识,希望对你有一定的参考价值。

当我尝试在@Secured注释之外定义我的String时,我在grails中得到以下错误。

我得到以下错误Role.USER'是一个java.lang.String类型的内联常量,而不是@ grails.plugin.springsecurity.annotation.Secured中的属性表达式

class Role {
    final static String USER = "ROLE_USER"
    final static String ADMIN = "ROLE_ADMIN"


    public final static String[] LOGINED_USER = [USER, ADMIN].asImmutable()

}

以下控制器说明了我的问题..

class MyController {

    @Secured(["permitAll"]) //Works fine
    def action1() {
    }


    @Secured(LOGINED_USER) //Doesn't work
    def action2() {
    }

    @Secured([Role.ADMIN, Role.USER]) //Doesn't work
    def action3() {
    }


    @Secured(["ROLE_ADMIN", "ROLE_USER"]) //Works fine
    def action4() {
    }
}
答案

您必须明确公开USER和ADMIN常量,添加public修饰符

public final static String USER = "ROLE_USER"
public final static String ADMIN = "ROLE_ADMIN"

在这种情况下,Groovy不会使用注释中不允许使用的geters setter

以上是关于Spring安全注释预期为内联常量的主要内容,如果未能解决你的问题,请参考以下文章

Thymeleaf(第九十一二章)本地变量#属性优先级#注释和块#内联

Spring Data:带有注释@Query 的方法无法按预期工作

如何为 Spring Security 创建类型安全的用户角色?

具有休眠 CRUD 操作的 Spring 3 注释:@Autowired 未按预期工作

有没有办法在 Spring Data @Query 注释值中使用常量?

带有 Kotlin 的 Spring Boot - @Value 注释未按预期工作