2009-06-19 8 views
3

Est-il possible de faire quelque chose comme ce qui suit: Puis-je injecter du code au printemps en utilisant des annotations AOP?

public void doStuff(@RequirePrivilege("foo") User user) { 
    // ... 
} 

et le faire tourner efficacement comme si elle était le suivant? Je sais que Spring a plusieurs types de support AOP, mais le meilleur que j'ai pu trouver était le code AOP qui a été annoté pour qu'il s'exécute avant ou après une méthode spécifique. Je veux faire l'inverse et annoter le code qui devrait être changé. En fin de compte, je pourrais faire la vérification ci-dessus à l'intérieur de la méthode, mais la manière d'annoter fournit une documentation supplémentaire qui rend évident que l'utilisateur a besoin d'un privilège particulier sans avoir à synchroniser la documentation avec le code.

Répondre

1

Vous pouvez utiliser AspectJ pour cela, car il correspond aux annotations. Vous pouvez ensuite utiliser un aspect autour pour décider si l'utilisateur répond aux exigences pour utiliser cette méthode. Spring vous permet d'utiliser AspectJ, et je suggère que si possible, vous ne le faites pas au moment de l'exécution, mais au moment de la compilation, car il n'y a aucune raison de payer le prix pour utiliser cet aspect lorsque vous démarrez le application. Mais, si vous devez le faire à l'exécution, alors c'est faisable, pour moi j'essaie d'utiliser autant que possible le temps de compilation.

Vous pouvez regarder AspectJ En action (http://www.manning.com/laddad2/), mais voici un exemple de là: modèle Signature:

* *(@RequestParam 
(@Sensitive *)) 

Description de

*Any method with one parameter marked with the @RequestParam annotations and the parameter’s type is marked with the @Sensitive annotation.* 

Exemple

void create(@RequestParam 
MedicalRecord mr), assuming 
MedicalRecord carries the 
@Sensitive annotation. 
1

Je suis certain que votre exemple de "privilèges insuffisants" peut être fait avec Spring AOP, parce que c'est ainsi que fonctionne Spring Security. Vous pouvez faire des choses très sophistiquées avec des conseils et AspectJ.