0

ドメインオブジェクトが渡されるメソッドにSpringセキュリティアノテーションを適用する方法を理解しています。たとえば、次のように機能します。

@PreAuthorize("hasPermission(#node, 'write')")
void update(Node node);

ただし、セキュリティで保護しようとしている別の方法を以下に示します。

void delete(String nodeName)

このメソッドではドメインオブジェクトを使用できないため、このメソッドで「hasPermission」を使用する方法がわかりません。どんな助けでも大歓迎です。私はACL実装をカスタマイズすることにオープンですが、この特定のケースでは、そのようなカスタマイズは「ノード」オブジェクトだけでなく、他のすべてのドメインオブジェクトでも機能するはずです。

ありがとう、
ラグー

4

1 に答える 1

0

この場合、ID ではなく名前で削除しています。その方法は、削除するオブジェクトを検索し、それを取得したら、質問の最初の操作のパターンに従う実際の削除メソッドに渡すことです。ユーザーがオブジェクトを削除できるかどうかのチェックは、ルックアップ後に行われます。次のようなパターンが得られます。

void delete(String name) {
    Node node = nodeFinder.lookup(name);
    if (node == null)
        throw new NoSuchNodeException(name);
    underlyingEngine.delete(node);
}

nodeFinderand (特に)はunderlyingEngine、Spring が必要なセキュリティ チェックでラップできるように、Bean を注入する必要があります。(nodeFinderチェックは、ユーザーが名前付きノードについて知ることを許可されているunderlyingEngineかどうかであり、特定の操作 (この場合は削除) が許可されているかどうかに焦点を当てる必要があります。)

式で を使用し@PreAuthorizeて、を に直接適用することもできますNode(Bean にすることにした場合) 。#this

于 2012-11-06T13:35:54.953 に答える