2012-02-08 4 views
3

たとえば、次のように事前認証なし誰かがSpringセキュリティPreAuthorizeアノテーションをexlpainできますか?

@PreAuthorize("hasRole('admin') && hasPermission('save', #user)") 
void updateUser(User user) { 
    // some code 
} 

そして、いくつかの実装例。

void updateUser(User user) { 
    Security.hasRole(Roles.ADMIN); 
    Security.hasPermission(Permission.SAVE, user); 
    // some code 
} 

2番目の例はわかりやすいです。 IDE(リネームの役割、またはすべての役割の用途の検索)によってリファクタリングできます。コンパイル時のコードチェック。より速く作業してください。そして他の利点があります。

なぜ春のセキュリティ開発者はアノテーションとSpELを選択したのですか?誰かがそれを説明することはできますか?

私が見つけることができる理由の1つ - ApplicationContextへのより簡単なアクセス。しかし、私が見る限りでは、SecurityContextHolderシングルトンを通してどのようにしてもセキュリティを強化できます。

答えて

3

私の視点から見ると、テストでは簡単に非アクティブ化(またはより正確、有効化されない)できるという利点があります。

私はセキュリティに関することに注意を払わずにテスト(単体テスト、機能テストなど)を書くことができます。テストは、テストしたい機能に集中することができます。

もちろん、これは「明示的」バージョン(2番目の例)でも可能ですが、テストでは注意が必要です。テストを長くすると(コードが長くなります)、維持する。

1

@Ralphの回答に加えて、私はいくつかの利点を追加します。

  1. @PreAuthorize(& CO。)メタ注釈付き@Documentedであり、これは、注釈が保護された方法ののJavadocに示されることを意味します。あなたの文書を読んだ人は、その方法が安全で、どのような条件の下であるかを直ちに知るでしょう。

  2. @Inheritedを使用してメタアノテーションが追加されているため、親クラスに@PreAuthorizeを追加して、追加のパターンを実装せずにすべての階層を自動的に保護することができます。

関連する問題