2

サービスメソッドによって返されるコレクションをフィルタリングしたいと思います。このフィルタリングには別のサービスメソッドの呼び出しが含まれるため、コレクションの各要素のアノテーション内の式を@PostFilter呼び出すため、ここでは使用しません。SPEL代わりに、私は次のように使用し@PostAuthorizeています:

@PostAuthorize("canAssignToUser(returnObject)")
List<UserInfo> getUsers(int userId);

canAssignToUser、渡されたリターンリストからユーザーを削除しようとしています。どうやら、これは問題であり、返されたリストの変更にはいくつかの制限があります。メソッドレベルのアノテーションを使用し、リストの各要素に対してSPEL式を呼び出さずに、メソッドから返されたリストを変更するにはどうすればよいですか。

4

2 に答える 2

2

は値@PostAuthorizeの評価に使用されるbooleanため、インターセプターは戻り値を式に渡しません (こちらを参照)。すべての要素をチェックせずに要素を削除する方法は何ですか? (のように@PostFilter)

フィルタリングにSpring Securityを使用したい場合は、選択肢がないと思います

于 2012-05-14T13:44:53.180 に答える
0

返されたオブジェクトは自由に変更できます。インターセプターは渡されたオブジェクトを返さない場合でも、オブジェクトへの変更が通知されます。最終的に、returnedObject が変更されます。(注: 内部のカスタム セキュリティ メソッド@PostAuthorizeはブール値のみを返すことができます。)

public class CustomMethodSecurityExpressionRoot extends SecurityExpressionRoot implements MethodSecurityExpressionOperations {

    public CustomMethodSecurityExpressionRoot(Authentication authentication) {
        super(authentication);
    }

    public boolean canAssignToUser(Object returnObject) {
        // do modifications to returnObject
        return true;
    }

getUsers() メソッドは、評価後に変更されたリストを返します@PostAuthorize("canAssignToUser(returnObject)")

于 2016-06-08T05:17:06.790 に答える