8

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
    }
    
  2. method のフィルタを PreAuthorise します。

    @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

同じことに対処するためのポインタを提供してください。

4

4 に答える 4

6

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;

さらに、最初の場合はパラメーター名が一致していないことがわかりました (つまり、Service と ServiceImpl の両方に異なるパラメーター名がありました)。

統一性を維持するようになり、問題は修正されたようです。

于 2014-04-14T08:12:29.590 に答える
0

@zeroflagL が尋ねたように: デバッグ情報なしでコンパイルしていますか? これは、Ehcache を使用した spring @Cacheable、有効なオブジェクトの spel find nullおよびSpEL キーを使用した Spring @Cacheable: と同じ問題である可能性があります<debug>false</debug>maven-compiler-plugin。_

于 2014-06-20T07:29:48.660 に答える