0

我正在尝试使用 AOP 在 spring 中记录运行时数据。我能够记录静态消息。但我的问题是我必须记录用户(例如名称)给出的输入值,如果用户在表单中输入“siva”作为用户名,我的日志消息应该是“Siva 已登录”。

我有一个带有用于获取用户名的文本框的 jsp 表单、具有用于用户名的 setter 和 getter 的 bean 类、一个控制器类和一个方面类。

我的控制器类是:

@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

要在控制器方法中获取用户名参数,您只需使用 @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,在这种情况下,您不必使用 @RequestParam 来获得 AOP 工作。

于 2013-02-02T06:57:03.827 回答