私は Apache Shiro と Spring Security を比較してきました。私は Shiro が使用するセキュリティ モデルが大好きで、Spring Security よりもはるかにクリーンであると信じています。
ただし、メソッド レベルのセキュリティ アノテーション内からメソッド パラメーターを参照できると便利です。たとえば、今は次のようなことができます。
@RequiresPermissions("account:send:*")
public void sendEmail( EmailAccount account, String to, String subject, String message) { ... }
この例のコンテキスト内では、これは、認証されたユーザーが電子メール アカウントで電子メールを送信する権限を持っている必要があることを意味します。
ただし、インスタンス レベルのアクセス許可が必要なため、これでは十分に細かく設定できません。このコンテキストでは、ユーザーが電子メール アカウントのインスタンスに対するアクセス許可を持つことができると仮定します。したがって、前のコードを次のように書きたいと思います。
@RequiresPermissions("account:send:${account.id}")
public void sendEmail( EmailAccount account, String to, String subject, String message) { ... }
このように、許可文字列はメソッドに渡されたパラメーターを参照しているため、EmailAccount の特定のインスタンスに対してメソッドを保護できます。
メソッド内のプレーンな Java コードからこれを簡単に実行できることはわかっていますが、アノテーションを使用して同じことを実現できれば素晴らしいと思います。Spring Security がそのアノテーションで Spring EL 式をサポートしていることは知っています。
これは間違いなく Shiro の機能ではないので、独自のカスタム アノテーションを作成する必要がありますか?
ありがとう、
アンドリュー