1

同じバージョンの 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 マッチングと同様に、最初に一致した式が使用されるため、最も具体的な一致がポイントカットのリストの最初に来る必要があります。セキュリティ アノテーションは、ポイントカットよりも優先されます。

参照ドキュメントで説明されているセクションをコピーして貼り付けます(ドキュメントをスクロールするのが面倒だと感じる人もいるかもしれません)。

4

1 に答える 1

5

この式で試してください:

<protect-pointcut expression="execution(* your.package.controller.*.*(..))" access="ROLE_ADMIN"/>
于 2013-01-16T19:53:38.227 に答える