2011-07-27 13 views
32

私はApache ShiroとSpring Securityの間のいくつかの比較を行っています。私はShiroが使用するセキュリティモデルを本当に愛しており、Spring Securityよりはるかにクリーンであると信じています。Apache Shiroセキュリティアノテーションで式を使用できますか?

ただし、メソッドレベルのセキュリティアノテーションからメソッドパラメータを参照できるのは、すばらしいことです。例えば、今私はそうのようなものでした:この例の文脈の中で

@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式をサポートしています。

これは確かに城の特徴ではないので、独自のカスタム注釈を書く必要がありますか?

おかげで、

アンドリューhttp://shiro.apache.org/static/current/apidocs/org/apache/shiro/authz/aop/package-summary.htmlのクラスで

+7

新しい機能要求を作成しましたか? http://shiro.apache.org/issues.html –

+0

複数の人がこれに対する新しい機能リクエストを追加しました。例を見てください:https://issues.apache.org/jira/browse/SHIRO-331 – user64141

答えて

6

見て、特にPermissionAnnotationHandler。アノテーションに遭遇したときにShiroがすべてgetSubject().isPermitted(permission)という呼び出しを行い、注釈の値の中にまったく置き換えられないことがわかります。この種の機能が必要な場合は、ハンドラをオーバーライドする必要があります。

あなたの質問に答えてください:はい、これは確かに城の機能ではなく、あなた自身の注釈を書くか、何らかの形でそのハンドラを上書きする必要があります。

+1

@drewzilla「私のタグ」のビューでこのq/aを思いつきました。私は答えがそうではないかと思います正しい。否定的な答えも答えになることに注意してください。回答に欠けていることがあれば教えてください。 –

2

この機能は、現在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

+0

'$ {account.id}'これは明らかにSpringのBeanWrapper(リフレクション)を使用しています。いくつかの行のコードがIMHOに書き込まれるのを防ぐかもしれないが、これはShiroが意図しているセキュリティフレームワークの一部ではない。 – lrn2prgrm

+0

これはまだ修正されていません。 Springを使用している場合、他のSpringアノテーションのように使用する方法はありますか? – tobe

関連する問題