35

私は 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 の機能ではないので、独自のカスタム アノテーションを作成する必要がありますか?

ありがとう、

アンドリュー

4

2 に答える 2

8

http://shiro.apache.org/static/current/apidocs/org/apache/shiro/authz/aop/package-summary.htmlのクラス、特にを見てくださいPermissionAnnotationHandler。注釈に遭遇したときに Shiro が行うことはすべて@RequiresPermissions呼び出しgetSubject().isPermitted(permission)であり、注釈値内での置換はまったく行われていないことがわかります。この種の機能が必要な場合は、何らかの方法でそのハンドラーをオーバーライドする必要があります。

あなたの質問に答えるには: はい、これは間違いなく Shiro の機能ではなく、独自の注釈を記述するか、何らかの方法でそのハンドラーをオーバーライドする必要があります。

于 2012-08-24T13:03:31.723 に答える
3

この機能は現在、Shiro ではサポートされていません。複数の人がこの機能をリクエストしています。おそらく、私たちはその問題に投票できますか?

https://issues.apache.org/jira/browse/SHIRO-484

https://issues.apache.org/jira/browse/SHIRO-77

https://issues.apache.org/jira/browse/SHIRO-417

https://issues.apache.org/jira/browse/SHIRO-331

于 2015-12-14T02:42:03.097 に答える