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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top