目前我们正处于产品的开发阶段,坦率地说,已经编写了许多控制器/服务。我们正在使用Spring MVC, Core, Aspect, Security etc along with Hibernate, JQuery
等。
现在我们需要捕获登录用户活动,例如按钮点击,菜单点击,超链接点击等。
一种方法是使用Spring Aspect
,并创建我自己的annotation
或在春天使用内置(如果有的话)。但问题是,我必须手动将其添加到我的应用程序中的所有控制器。阅读this。
在处理请求时,Global level
上有一些可用于调度程序servlet的地方。 (就像@ControllerAdvice with @ExceptionHandler
)
答案 0 :(得分:2)
Spring AOP或AspectJ中的切入点不仅可以基于手动添加的注释,还可以基于您想要拦截的方法的其他常见特征,例如
及其任何组合。你可能会相处得很远。但是为了给出更具体的答案,我必须更多地了解你的代码。
更新:既然您告诉我共同点,我就有了一个想法:
package de.scrum_master.aspect;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.web.bind.annotation.RequestMapping;
public aspect RequestMappingInterceptor {
@Pointcut(
"within(@org.springframework.stereotype.Controller *) && " +
"@annotation(requestMapping) && " +
"execution(* *(..))"
)
public void controller(RequestMapping requestMapping) {}
@Before("controller(requestMapping)")
public void advice(RequestMapping requestMapping, JoinPoint thisJoinPoint) {
System.out.println(thisJoinPoint);
System.out.println(" " + requestMapping);
System.out.println(" " + requestMapping.method()[0]);
}
}
此示例拦截所有控制器中的所有公共方法,并另外将请求映射注释绑定到您可以轻松评估的参数。