spring security:为什么我们无法访问 @PreAuthorize 中的 Hibernate 实体参数?

2023-12-07

我正在应用以下接口方法@PreAuthorize :

@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存在在那里的物体。此外,在调用此方法之前,我已确保正确构造了用户对象。

我真的不明白为什么会userSPEL 解析器将字段视为空


您可以使用调试器检查发生了什么方法安全评估上下文, 里面对象查找变量(字符串名称) 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(使用前将#替换为@)

spring security:为什么我们无法访问 @PreAuthorize 中的 Hibernate 实体参数? 的相关文章

随机推荐