0

AOPを使用して春の実行時データをログに記録しようとしています。静的メッセージをログに記録できます。しかし、私の問題は、ユーザー(Eg.Name)によって指定された入力値をログに記録する必要があり、ユーザーがフォームにユーザー名として「siva」を入力した場合、ログメッセージは「Sivaがログインしました」と表示されるはずです。

ユーザー名を取得するためのテキストボックス、ユーザー名用のセッターとゲッターを持つBeanクラス、コントローラークラス、アスペクトクラスを含むjspフォームがあります。

私のコントローラークラスは次のとおりです。

@RequestMapping("/login.htm")

public ModelAndView success(String name){

}

私のアスペクトクラスは次のとおりです。

   @After("execution(* com.controller.MyController.success(String))&&args(name)")

public void After(){

    System.out.println("after method");
}

コントローラメソッドでユーザー名を取得する方法がわかりません。私は完全に盲目です。私は多くの可能性を探して試しましたが、何もうまくいきませんでした。どんな助けでもありがたいです....事前に感謝します...

4

2 に答える 2

0

コントローラー メソッドでユーザー名パラメーターを取得するには、"name" 引数に @RequestParam で注釈を付けるだけです。例えば:

@RequestMapping("/login.htm")

public ModelAndView success(@RequestParam("name") String name){

}

after アドバイスで名前を取得するには、after メソッドのシグネチャを変更して、"name" 文字列を受け入れるようにします。

@After("execution(* com.controller.MyController.success(String))&&args(name)")

public void after(String name){
    logger.info("User "+name+" has logged in!");
}

問題が解決することを願っています。

于 2013-02-02T06:30:35.633 に答える
0
//your Aspect class
@Aspect
@Component
public class MyAspect {

    @Pointcut("execution(* com.controller.MyController.success(..)) && args(username)")
    public void controllerExecution(String username){};

    @After("controllerExecution(username)")
    public void afterControllerExecution(final String username){
         System.out.println("username is : " + username);
    }
}

//the method in your controller
@RequestMapping(value="/success")
public String success(String username){
    return "home";
}

リクエスト URL は次のようになります: www.XXX.com/success?username=Johnny @Piyush Joshi。この場合、AOP を機能させるために必ずしも @RequestParam を使用する必要はありません。

于 2013-02-02T06:57:03.827 に答える