Java SpelEvaluationException:EL1007E:(位置43):字段或属性';集团';在null上找不到
我已经为我的web应用程序完全配置了SPRING方法安全性。(启用前/后注释) 但是最近我遇到了一个奇怪的问题。总结如下:Java SpelEvaluationException:EL1007E:(位置43):字段或属性';集团';在null上找不到,java,spring,spring-security,spring-el,spelevaluationexception,Java,Spring,Spring Security,Spring El,Spelevaluationexception,我已经为我的web应用程序完全配置了SPRING方法安全性。(启用前/后注释) 但是最近我遇到了一个奇怪的问题。总结如下: POJO概述 // User Class public class User { int id; String name; // getters and setters } // Group Class public class Group { int id; String name; // getters and sett
// 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
}
@PreAuthorize("canIEditGroupProfile(#membership.group.id)")
public int updateGroupMembership(GroupMembership membership)
throws GroupsServiceException;
GroupMembership
对象(存在正确的用户和组组成)时,安全筛选器引发以下异常:
errorMessage: "Failed to evaluate expression
canIEditGroupProfile(#membership.group.id)'"
在深入了解例外情况后:
errorMessage: "Failed to evaluate expression
canIEditGroupProfile(#membership.group.id)'"
原因是:
org.springframework.expression.spel.SpelEvaluationException:
EL1007E:(pos 33): Field or property 'group' cannot be found on null
请提供指向相同地址的指针。getter/setter似乎很好。。。也没有出现
null
的情况
然而,这是一个有趣的观察结果;这个给了我一个错误:
@PreAuthorize("canIEditGroupProfile(#membership.group.id)")
public int updateGroupMembership(GroupMembership membership)
throws GroupsServiceException;
这很好:
@PreAuthorize("canIEditGroupProfile(#groupmembership.group.id)")
public int updateGroupMembership(GroupMembership groupmembership)
throws GroupsServiceException;
我进一步观察到,参数名在first中不匹配(即Service和serviceinpl都有不同的参数名)
现在,为了保持一致性,这个问题似乎已经得到了解决。正如@zeroflagL所问:您是否在编译时没有调试信息?这可能与and的问题相同–检查POM(或Eclipse配置或其他)的调试配置,例如
maven编译器插件中的false
,我在Spring Boot应用程序中遇到了相同的问题。事实证明,正如上面的一条评论中所提到的,我在编译时没有使用调试符号信息。我想指出,我可以通过两种方式解决这个问题:
1.(我最喜欢的一个):
只需将其包含在pom.xml-->插件中即可
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<compilerArgument>-parameters</compilerArgument>
<testCompilerArgument>-parameters</testCompilerArgument>
</configuration>
</plugin>
org.apache.maven.plugins
了解更多关于这个问题的信息
希望有帮助 我也遇到了同样的问题,发现要检查授权的对象的名称在接口和实现中必须相同
例如,如果您的界面中有此方法:
@PreAuthorize("hasPermission(#foo, 'UPDATE')")
public void testMethod(MyObject foo);
在实施过程中,您应该具备以下条件:
public void testMethod(MyObject foo) { ... your code here... }
我希望这能有所帮助。检查setter/getter并确保它们是正确的,null
作为参数传递,或者代码在编译时没有调试信息。仍在处理一个非常类似的问题(但在IntelliJ中)。有趣的观察,在将这个片段粘贴到我的POM中之后,maven成功地运行了我的测试。之后,当我使用IntelliJ运行它们时,它们也会成功,但IntelliJ一旦重建我的代码,它们就会再次崩溃。使用maven编译后,它们再次工作。我开始觉得恶心。。。