SpelEvaluationException:EL1007E:(pos 43):在null上找不到字段或属性"group"

hem*_*vsn 8 java spring spring-security spring-el spelevaluationexception

我为我的Web应用程序完全配置了SPRING METHOD安全性.(启用了PRE/POST注释).

但最近我遇到了一个奇怪的问题.总结如下:

  1. POJOS摘要

    // User Class
    public class User {
        int id;
        String name;
        // getters and setters
    }
    
    // Group Class
    public class Group {
        int id;
        String name;
        // getters and setters
    }
    
    // GroupMembership class
    public class GroupMembership {
        private int id;
        private User user;
        private Group group;
        // getters and setters
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. PreAuthorise过滤方法.

    @PreAuthorize("canIEditGroupProfile(#membership.group.id)")
    public int updateGroupMembership(GroupMembership membership)
        throws GroupsServiceException;
    
    Run Code Online (Sandbox Code Playgroud)

传递完全填充的GroupMembership对象(存在适当的用户和组合成)时,安全筛选器将引发以下异常:

errorMessage: "Failed to evaluate expression
    canIEditGroupProfile(#membership.group.id)'"
Run Code Online (Sandbox Code Playgroud)

在挖掘异常时:

原因是:

org.springframework.expression.spel.SpelEvaluationException:
    EL1007E:(pos 33): Field or property 'group' cannot be found on null
Run Code Online (Sandbox Code Playgroud)

请提供相同的指示.

hem*_*vsn 5

getter / setters似乎很好...也没有情况null

但是有趣的观察;这给我一个错误:

@PreAuthorize("canIEditGroupProfile(#membership.group.id)")
public int updateGroupMembership(GroupMembership membership)
    throws GroupsServiceException; 
Run Code Online (Sandbox Code Playgroud)

这很好用:

@PreAuthorize("canIEditGroupProfile(#groupmembership.group.id)")
public int updateGroupMembership(GroupMembership groupmembership)
    throws GroupsServiceException;
Run Code Online (Sandbox Code Playgroud)

我进一步观察到,参数名称在第一种情况下不匹配(即Service和ServiceImpl都具有不同的参数名称)。

现在保持一致性,该问题似乎已解决。