Spring/Spring安全方法中使用SpEL传递参数

问题描述 投票:0回答:1

亲爱的 Spring/Spring Security 开发人员:

对于 Spring Boot 中的这个控制器方法,我将 PreAuthorize 注解与 hasPermission 方法结合使用。我的问题是如何使用 SpEL 将 Enum 值正确传递给 hasPermission 方法。

我收到此错误:通过构造函数参数 0 表达的依赖关系不满足:没有可用的“java.lang.String”类型的合格 bean

@Component("Scope")
public enum ScopeEnum{

    UPDATE("update"), DELETE("delete");

    public final String name;

    ResourceScope(String name) {
        this.name= name;
    }
}

@PreAuthorize("hasPermission(#authentication, @Scope.UPDATE")
public ResponseEntity doUpdateOrDelete(Authorization authorization, ...) {
  // Code....

}
java spring spring-boot spring-security spring-el
1个回答
0
投票

首先,枚举类无法在外部实例化,因此不要尝试将枚举注册为 Spring bean。此外,Spring无法帮助您找到String类型的构造函数参数。其次,你的EL表达式有错误。因此,最终的解决方案是删除 @Component 并将 EL 表达式更改为 @PreAuthorize("hasPermission(#authentication, T(yourEnumPackageName.ScopeEnum).UPDATE.name)")。

© www.soinside.com 2019 - 2024. All rights reserved.