Question

Est-il possible de faire quelque chose comme ce qui suit:

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

et le faire fonctionner comme s'il était le suivant?

public void doStuff(User user) {
    if(!user.hasPrivilege("foo"))
        throw new UserHasInsufficientPrivileges(); // this is a RuntimeException
    // ...
}

Je sais que Spring prend en charge différents types de support AOP, mais le mieux que j'ai pu trouver est le code AOP qui a été annoté pour pouvoir être exécuté 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 simplement effectuer la vérification ci-dessus dans la méthode, mais la méthode des annotations fournit une documentation supplémentaire indiquant clairement que l'utilisateur a besoin d'un privilège particulier sans avoir à maintenir la synchronisation de la documentation avec le code.

Était-ce utile?

La solution

Vous pouvez utiliser AspectJ pour cela, car cela correspond aux annotations. Vous pouvez ensuite utiliser un aspect périphérique pour décider si l'utilisateur remplit les conditions pour utiliser cette méthode.

Spring vous permet d'utiliser AspectJ, et je suggérerais que si possible, 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 à chaque démarrage de l'application. . Mais si vous devez le faire au moment de l'exécution, c'est faisable, j'essaie d'utiliser autant que possible le temps de compilation.

Vous pouvez consulter AspectJ en action ( http://www.manning.com/laddad2/ ) mais voici un exemple à partir de là: Modèle de signature:

* *(@RequestParam
(@Sensitive *))

Description

*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.

Autres conseils

Je suis certain que vos "privilèges insuffisants" Cet exemple peut être réalisé avec la AOP du printemps , car comment Spring Security fonctionne. Vous pouvez faire des choses très sophistiquées avec des conseils autour et AspectJ.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top