2009-06-19 15 views
3

Ist es möglich, so etwas wie die folgenden Funktionen ausführen: Kann ich Code im Frühling mit AOP-Anmerkungen einfügen?

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

und haben es effektiv ausgeführt werden, als ob es die folgenden wurden?

Ich weiß, dass Spring hat verschiedene Arten von AOP-Unterstützung, aber das Beste, was ich finden konnte, war AOP-Code, der annotiert wurde, so dass es vor oder nach einer bestimmten Methode ausführen würde. Ich möchte das Gegenteil tun und den Code notieren, der geändert werden sollte.

Letztendlich konnte ich nur die obige Überprüfung innerhalb der Methode tun, aber die Annotation Art der Dinge bietet zusätzliche Dokumentation, die es offensichtlich macht, dass der Benutzer ein bestimmtes Privileg benötigt, ohne die Dokumentation synchron mit dem Code zu halten.

Antwort

1

Sie können dafür AspectJ verwenden, da es auf Anmerkungen passt. Sie können dann einen umgebenden Aspekt verwenden, um zu entscheiden, ob der Benutzer die Anforderungen für die Verwendung dieser Methode erfüllt.

Spring ermöglicht Ihnen die Verwendung von AspectJ, und ich würde vorschlagen, dass Sie dies nicht zur Laufzeit, sondern zur Kompilierzeit tun, da es keinen Grund gibt, den Preis für die Verwendung dieses Aspekts zu bezahlen Anwendung. Aber wenn Sie es zur Laufzeit tun müssen, dann ist das machbar, für mich versuche ich so oft wie möglich die Kompilierzeit zu verwenden.

Sie möchten bei AspectJ in Aktion sehen (http://www.manning.com/laddad2/), aber hier ist ein Beispiel von dort: Signaturmuster:

* *(@RequestParam 
(@Sensitive *)) 

Beschreibung

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

Beispiel

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

Ich bin sicher, dass Ihr "nicht ausreichende Privilegien" Beispiel mit Spring AOP getan werden kann, denn so funktioniert Spring Security. Sie können einige sehr anspruchsvolle Dinge mit Rat und AspectJ tun.

Verwandte Themen