我必须登录我的控制器,哪个用户正在执行操作。而不是在每个控制器的每个方法中写入日志消息。我考虑用aspectj来做。
我有一个包 com.bbvaglobalnet.manager.controller 包含控制器,我希望在此包和子包的类的所有公共方法中输出日志消息。所以看第 6.2.3.4 节
我想我的表达是这样的
执行(公共 * com.bbvaglobalnet.manager.controller.. ( ..))
我的方面类如下
package com.bbvaglobalnet.manager.aspects;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;
import com.bbvaglobalnet.manager.controller.*;
@Aspect
@Component
public class LogUserAspect {
private final static Logger LOGGER = LoggerFactory.getLogger(LogUserAspect.class);
@Before("execution(public * com.bbvaglobalnet.manager.controller..*.*(..))")
public void logUser2(JoinPoint jp) {
LOGGER.info("[User: {}]", SecurityContextHolder.getContext().getAuthentication().getName());
}
}
我知道 bean 已注册,我尝试过使用另一种不同的模式和类接缝来工作
我的spring aop上下文配置
<context:component-scan base-package="com.bbvaglobalnet.manager.aspects" />
<aop:aspectj-autoproxy/>
对不起我的英语,这不是我的第一语言