我正在应用以下接口方法@PreAuthoriz
e :
@PreAuthorize("doSomething(#user.id)")
void something(User user, List<User> accessList);
where User
is a 休眠实体目的。它给了我一个错误:
org.springframework.expression.spel.SpelEvaluationException:
EL1007E:(pos 13): 无法在 null 上找到字段或属性“id”
org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty(PropertyOrFieldReference.java:204)
没有办法user
参数为null,就好像我去掉注解,在实现这个接口方法的方法中检查user的值,有一个有效的User
存在在那里的物体。此外,在调用此方法之前,我已确保正确构造了用户对象。
我真的不明白为什么会user
SPEL 解析器将字段视为空
您可以使用调试器检查发生了什么方法安全评估上下文, 里面对象查找变量(字符串名称) method:
@Override
public Object lookupVariable(String name) {
Object variable = super.lookupVariable(name);
if (variable != null) {
return variable;
}
if (!argumentsAdded) {
addArgumentsAsVariables();
argumentsAdded = true;
}
所以你可以看到到底发生了什么addArgumentsAsVariables()方法作为方法参数到 SPELL 变量的转换在 Spring 中实现得非常清楚。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)