質問
私は、AspectJのを学ぶために始めている、と私は言う、ユーザーログインのためのユースケースを持っています。ユーザーのセッションデータ(クッキー)がサーバに保存されているデータと一致しない場合、私はと呼ばれる機能を変更したいです。私は2つの操作を持っていると言うます:
class HttpServlet {
public function() {
}
public function2() {
}
public doLogin() {
}
}
と私のようなアドバイスがあります:
public aspect UserLoggedIn {
pointcut GreetingServer(): within(HttpServlet);
pointcut requireAuth():
GreetingServer() && execution(* function*(..));
before(): requireAuth() {
if ( notLoggedIn ) {
redirectToDoLoginAndAbortCalledFunction();
}
}
}
それでは、どのように私はredirectToDoLoginAndAbortCalledFunction()の仕事を作るのですか?
解決
私たちのプロジェクトでは、我々は正確に同じ認証目的でサーブレットフィルターを使用しました。あなたはそのためにAOPを使用する任意の理由はありますか?
しかし、場合には、あなたはまだあなたが干渉し、メソッド呼び出しのことができるようにするためにaround
側面を使用する必要があり、そのためにAspectJを使用する必要があります。私たちは、メソッドの戻り値をキャッシュするために同様の技術を使用しています。
あなたは一例 HTTPのために、この記事を見ることができます:// www.theserverside.com/tt/blogs/showblog.tss?id=AspectJCachingするます。
他のヒント
あなたは、アドバイスの前に代わりのアドバイスを中心に、以下のようなものを使用したいと思うでしょう。ここでは、両方の方法は、ブールを返すことを前提としての例は次のとおりです。
boolean around(): requireAuth() {
if ( notLoggedIn ) {
return redirectToDoLoginAndAbortCalledFunction();
} else {
return proceed();
}
}
また、あなたは、この()、ターゲット()、とargs()ポイントカットを使用してポイントカットで適切な値をキャプチャすることによって行うことができます、あなたのアドバイスにパラメータを渡す必要がある場合があります。
所属していません StackOverflow