尊敬的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....
}
字符串
1条答案
按热度按时间smdncfj31#
首先,enum类不能在外部示例化,所以不要尝试将enum注册为Spring bean。而且Spring无法帮助您找到String类型的构造函数参数。其次,您的EL表达式中存在错误。因此,最终的解决方案是删除
@Component
并将EL表达式更改为@PreAuthorize("hasPermission(#authentication, T(yourEnumPackageName.ScopeEnum).UPDATE.name)")
。