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