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

tquggr8v  于 5个月前  发布在  Spring
关注(0)|答案(1)|浏览(109)

尊敬的Spring/Spring Security开发人员:
对于Sping Boot 中的这个控制器方法,我结合使用了PreAuthorize annotation和hasPermission方法。我的问题是如何使用SpEL将Enum值直接传递给hasPermission方法。
我得到了这个错误:Unsatisfied dependency expressed through constructor parameter 0:No qualifying bean of type 'java.lang.String' available

@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....

}

字符串

smdncfj3

smdncfj31#

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

相关问题