同じバージョンの Spring フレームワークで Spring security 3.2.0 を使用しています。Spring セキュリティは私のプロジェクトでうまく機能します。DAO クラス (およびその他) のメソッドを保護するために、(ファイル内で)次のポイントカットアプローチを使用したいと考えています。spring-security.xml
<global-method-security>
<protect-pointcut expression="execution(*controller.*.*(..))" access="ROLE_ADMIN"/>
</global-method-security>
指定されたポイントカット式は、パッケージ内のすべてのクラスのすべてのメソッドを保護し、指定されcontroller
た権限を持つユーザーのみがアクセスできることを期待してROLE_ADMIN
います。
しかし、この式を使用しようとすると、spring-security.xml
ファイルの保存時に次の例外が発生してプロセスが終了します。
PropertyAccessException 1: org.springframework.beans.MethodInvocationException: プロパティ 'pointcutMap' が例外をスローしました。ネストされた例外は java.lang.IllegalArgumentException: Pointcut is not well-formed: Expect 'name pattern' at character position 26 execution( controller. .*(..)) ^
私は、「 3.4.1要素」セクションの「 protect-pointcut を使用してセキュリティ ポイントカットを追加する」サブセクションの参照ドキュメントで指定されているアプローチに従おうとしています。<global-method-security>
このシナリオで正しい式の構文は何ですか?
編集:
protect-pointcut を使用してセキュリティ ポイントカットを追加する
簡単な宣言だけで多くの Bean にセキュリティを適用できるため、protect-pointcut の使用は特に強力です。次の例を検討してください。
<global-method-security>
<protect-pointcut expression="execution(* com.mycompany.*Service.*(..))" access="ROLE_USER"/>
</global-method-security>
com.mycompany
これにより、クラスがパッケージ内にあり、クラス名が「サービス」で終わるアプリケーションコンテキストで宣言された Bean のすべてのメソッドが保護されます。ROLE_USER
これらのメソッドを呼び出すことができるのは、ロールを持つユーザーだけです。URL マッチングと同様に、最初に一致した式が使用されるため、最も具体的な一致がポイントカットのリストの最初に来る必要があります。セキュリティ アノテーションは、ポイントカットよりも優先されます。
参照ドキュメントで説明されているセクションをコピーして貼り付けます(ドキュメントをスクロールするのが面倒だと感じる人もいるかもしれません)。