Webアプリケーション用にSPRINGMETHODセキュリティを完全に構成しています。 (PRE/POSTアノテーションが有効になっている場合)。
しかし最近、私は彼らと奇妙な問題に遭遇しました。要約は次のとおりです。
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
}
メソッドの事前承認フィルター。
@PreAuthorize("canIEditGroupProfile(#membership.group.id)")
public int updateGroupMembership(GroupMembership membership)
throws GroupsServiceException;
完全に入力されたGroupMembership
オブジェクト(適切なユーザーとグループの構成が存在する)を渡すと、セキュリティフィルターは次の例外をスローします。
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/settersは問題ないようです...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;
さらに私が観察したところ、最初の場合はパラメーター名が一致していませんでした(つまり、ServiceとServiceImplの両方でパラメーター名が異なっていました)。
現在、均一性を維持しているため、問題は修正されているようです。
SpringBootアプリケーションでも同じ問題が発生しました。上記のコメントに記載されているように、デバッグシンボル情報なしでコンパイルしていたことが判明しました。私は2つの方法で問題を修正できることに注意したいと思います。
1.(私のお気に入り):これをpom.xml->プラグインに含めるだけです
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<compilerArgument>-parameters</compilerArgument>
<testCompilerArgument>-parameters</testCompilerArgument>
</configuration>
</plugin>
私は本当に面白いと思いました このリンク この問題についてもっと知るために。
それが役に立てば幸い!
@zeroflagLが尋ねたように:デバッグ情報なしでコンパイルしていますか?これはおそらく Spring @Cacheable with Ehcache、spel find null for valid object および Spring @Cacheable with SpEL key:常にnullと評価されます – POMを確認してください(またはEclipse構成など)デバッグ構成用(例:<debug>false</debug>
の中に maven-compiler-plugin
。