【发布时间】:2017-10-26 20:41:17
【问题描述】:
我尝试为权限评估编写自定义类,因此它可以与 Spring Security @PreAuthorize 和 Spring 表达式语言一起使用,例如(authority 只是一个带有一些角色名称的常规 Spring 组件):
@PreAuthorize("@permissionEvaluator.anyOfRoles(@authority.ADMIN)")
PermissionEvaluator#anyOfRoles 方法声明如下所示:
boolean anyOfRoles(String... roles)
如图所示,此方法采用 String 类型的可变参数。当只传递一个参数(如上面的示例)但使用多个参数调用它时,它可以正常工作,例如。
@PreAuthorize("@permissionEvaluator.anyOfRoles(@authority.ADMIN, @authority.USER)")
原因
org.springframework.expression.spel.SpelEvaluationException: EL1004E: Method call: Method anyOfRoles(java.lang.String,java.lang.String) cannot be found on com.sun.proxy.$Proxy132 type
被抛出。当使用字符串数组调用时它仍然有效(基本上与 varargs 相同,只是语法糖),如下所示:
@PreAuthorize("@permissionEvaluator.anyOfRoles(new String[] { @authority.ADMIN, @authority.USER })")
我试图查看一些有关使用 spEL 传递 varargs 的附加信息,但 Spring 文档仅在 spEL 文档中神秘地 mentions
还支持可变参数。
此异常的原因可能是什么?除了在 spEL 中传递数组之外,还有其他解决方法吗?
【问题讨论】:
标签: java spring spring-security spring-el