35 votes

Puis-je utiliser des expressions dans les annotations de sécurité Apache Shiro?

J'ai fait quelques comparaisons entre Apache Shiro et de la Sécurité Printemps - je suis vraiment aimer le modèle de sécurité que Shiro utilise et croient que c'est beaucoup plus propre que le Printemps de Sécurité.

Cependant, un gros avantage serait d'être en mesure de référencer les paramètres de la méthode à partir de l'intérieur de la méthode la sécurité au niveau des annotations. Par exemple, je pourrais donc quelque chose comme:

@RequiresPermissions("account:send:*")
public void sendEmail( EmailAccount account, String to, String subject, String message) { ... }

Dans le cadre de cet exemple, cela signifie que l'utilisateur authentifié doit avoir l'autorisation d'envoyer des e-mails sur comptes de messagerie.

Cependant, ce n'est pas assez fine, que je veux niveau de l'instance autorisations! Dans ce contexte, nous supposons que les utilisateurs peuvent avoir des autorisations sur les instances de comptes e-mail. Donc, je voudrais écrire le code précédent quelque chose comme ceci:

@RequiresPermissions("account:send:${account.id}")
public void sendEmail( EmailAccount account, String to, String subject, String message) { ... }

De cette façon, l'autorisation de la chaîne est de référencement d'un paramètre passé à la méthode telle que la méthode peut être protégé contre une instance particulière de EmailAccount.

Je sais que je pourrais facilement le faire à partir de la plaine de code Java dans la méthode, mais il serait bon de réaliser la même chose en utilisant des annotations - je sais que le Printemps de Sécurité prend en charge de Printemps EL expressions dans ses annotations.

Est-ce certainement pas une caractéristique de Shiro et c'est ainsi que je dois écrire mes propres annotations?

Merci,

Andrew

8voto

Uli Points 318

Regardez les classes dans http://shiro.apache.org/static/current/apidocs/org/apache/shiro/authz/aop/package-summary.html, particulièrement PermissionAnnotationHandler. Là vous pouvez voir que tous Shiro n'lorsque vous rencontrez @RequiresPermissions d'annotation est appel getSubject().isPermitted(permission) et n'a pas de substitution à l'intérieur de l'annotation de la valeur à tous. Vous avez en quelque sorte remplacer le gestionnaire si vous voulais que ce type de fonctionnalité.

Donc, pour répondre à votre question: oui, ce n'est certainement pas une caractéristique de Shiro et vous devez écrire votre propre annotation ou en quelque sorte remplacer le gestionnaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X