我正在尝试使用AOP在春季记录运行时数据。我能够记录静态消息。但我的问题是我必须记录用户给出的输入值(Eg.Name),我的日志消息应该是" Siva已登录"如果用户输入'siva'作为表单中的用户名。
我有一个带有文本框的jsp表单用于获取用户名,bean类有setter和getter用于用户名,控制器类和方面类。
我的控制器类是:
@RequestMapping("/login.htm")
public ModelAndView success(String name){
}
我的Aspect类是:
@After("execution(* com.controller.MyController.success(String))&&args(name)")
public void After(){
System.out.println("after method");
}
我不知道如何在控制器方法中获取用户名。我完全失明了。我搜索并尝试了许多可能性,但没有成功。任何帮助表示赞赏....提前致谢...
答案 0 :(得分:0)
要在控制器方法中获取username参数,您只需要使用@RequestParam注释“name”参数。 e.g:
@RequestMapping("/login.htm")
public ModelAndView success(@RequestParam("name") String name){
}
要在你的建议中获取名称,只需将after方法的签名更改为接受“name”字符串:
@After("execution(* com.controller.MyController.success(String))&&args(name)")
public void after(String name){
logger.info("User "+name+" has logged in!");
}
希望它解决问题。
答案 1 :(得分: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";
}
请求网址如下:www.XXX.com/success?username = Johnny @Piyush Joshi,在这种情况下,你不一定必须使用@RequestParam才能让AOP正常工作。