2

アプリの一部のサービスメソッドに@PreAuthorizeアノテーションを付けました。これらのアノテーションはhasAuthorityhasRoleなどを使用し、将来的には他の有効な構成が含まれる可能性があります。例:

@PreAuthorize("hasAuthority('Customer.Get')")
public Customer getCustomer(String name);

などなど、すべてのPreAuthorizeアノテーションで使用されているすべての権限Customer.Getを反映して収集したいと思います。

PreAuthorize pre = (PreAuthorize) m.getAnnotation(PreAuthorize.class);
String expr = pre.value();

私はある種のものを探していました:

List<HasAuthority> h = SpringXYZ.getHasAuthorities(expr); そして、h.get(0)から「Customer.Get」文字列を取得します...。

これは可能ですか?アプリの初期化中にこの取得を行う必要があるため、その時点で使用可能な認証オブジェクトはありません。

任意の提案をいただければ幸いです。

4

1 に答える 1

1

このような SPeL 式hasAuthority('Customer.Get')は、実行時に評価されます。ロード時にフレームワークが認識しなければならないのは、 @PreAuthorize が適用されたこと (および文字列としての対応するパラメーター) だけです。すべての作業は、SPeL パーサー/ランタイム環境によって実行時に行われます。だから、あなたを助けることができるヘルパークラスはないと思います。

解析を避けたい場合は、@Secured アノテーションを使用してみてください。

@Secured("ROLE_Customer.Get")
public Customer getCustomer(String name);

ROLE_プレフィックスは削除される場合があります (いくつかの追加の conf):

@Secured("Customer.Get")
public Customer getCustomer(String name);

または JSR-250 @RolesAllowed:

@RolesAllowed("Customer.Get")
public Customer getCustomer(String name);

セキュリティの観点からは柔軟性が低くなりますが、パージングは​​はるかに簡単です。

于 2013-03-25T09:33:15.540 に答える