Raten in AspectJ Änderungen Steuerfluß
Frage
Ich fange gerade AspectJ zu lernen, und ich habe Use-Case für sagen wir, Benutzeranmeldung. Wenn ein Sitzungsdaten des Benutzers (Cookies) nicht die gespeicherten Daten auf dem Server übereinstimmen, ich will so genannte Funktion ändern. Sagen wir, ich habe zwei Operationen:
class HttpServlet {
public function() {
}
public function2() {
}
public doLogin() {
}
}
, und ich habe beraten, wie:
public aspect UserLoggedIn {
pointcut GreetingServer(): within(HttpServlet);
pointcut requireAuth():
GreetingServer() && execution(* function*(..));
before(): requireAuth() {
if ( notLoggedIn ) {
redirectToDoLoginAndAbortCalledFunction();
}
}
}
Wie mache ich redirectToDoLoginAndAbortCalledFunction () Arbeit?
Lösung
In unserem Projekt haben wir Servlet-Filter für genau den gleichen Authentifizierungs Zweck. Gibt es einen Grund, warum Sie AOP verwenden, um das wollen?
Aber falls Sie müssen noch AspectJ verwenden dafür, sollten Sie around
Aspekt, um in der Lage zu interfer Methodenaufruf verwenden. Wir verwenden ähnliche Technik für das Caching von Methodenrückgabewerten.
Sie können für ein Beispiel in diesem Artikel sehen http: // www.theserverside.com/tt/blogs/showblog.tss?id=AspectJCaching .
Andere Tipps
Sie wollen um verwenden Beratung statt, bevor Beratung, so etwas wie unten. Hier ist ein Beispiel, das davon ausgeht, dass beide Methoden boolean zurückgeben:
boolean around(): requireAuth() {
if ( notLoggedIn ) {
return redirectToDoLoginAndAbortCalledFunction();
} else {
return proceed();
}
}
Sie können auch in Parameter Ihren Rat übergeben müssen, die Sie durch die Erfassung der richtigen Werte in der pointcut tun können, mit der dieses (), Target () und args () pointcuts.