2

誰でも roo で作成されたエンティティを読み取ることができるが、管理者ユーザー (で指定applicationContext-security.xml) のみが作成/更新/削除できるように、Spring でセキュリティ ポリシーを設定しようとしています。カスタマイズすることで目標を達成できるはずですがapplicationContext-security.xml、方法がわかりません。次のようなintercept-urlを使用することを考えました:

<intercept-url pattern="/anyEntity/*?form" access="hasRole('ROLE_ADMIN')" />

しかし、この構成は POST の非表示フィールドであるため、DELETE をカバーしていません (ドキュメントによると、post メソッドはサポートされていますが、intercept-url タグで非表示フィールド値を指定する方法に関するドキュメントはありません)。

もう 1 つの方法は、エンティティ セッター メソッドで @secured を使用することです。私は現在、ゲッター/セッターを生成するために roo に依存しているため、可能であれば使用を避けたいと考えています。

私が推測するフィルタリングを行うカスタムコントローラーを作成することもできます。しかし、構成をカスタマイズするだけでよいように思えます。公開の読み取り専用ポリシーは非常に一般的な戦略であるため、明らかな何かが欠けているに違いありません。

4

2 に答える 2

0

これが私がやった方法です:

    <!-- only user role can use modify methods -->
    <intercept-url pattern="/**" method="POST" access="hasRole('ROLE_USER')" />
    <intercept-url pattern="/**" method="DELETE" access="hasRole('ROLE_USER')" />
    <intercept-url pattern="/**" method="PUT" access="hasRole('ROLE_USER')" />
    <!-- any role can use GET methods -->
    <intercept-url pattern="/**" method="GET" access="isAuthenticated()" />
    <intercept-url pattern="/**" method="HEAD" access="isAuthenticated()" />
    <intercept-url pattern="/**" method="OPTIONS" access="isAuthenticated()" />
    <intercept-url pattern="/**" method="TRACE" access="isAuthenticated()" />
于 2012-09-02T09:49:00.060 に答える
0

roo は隠しメソッド フィールドを http メソッドに変換するため、method="DELETE" 属性を使用して Intercept-url を使用できると思います。

ここにもいくつかの詳細情報があります

于 2012-08-08T16:19:12.207 に答える