java - 我的aspectj模式的方法不起作用

标签 java logging aop spring-aop aspect

我必须登录正在执行操作的用户的 Controller 。而不是在每个 Controller 的每个方法中写入日志消息。我考虑用aspectj来做。

我有一个包 com.bbvaglobalnet.manager.controller ,其中包含 Controller ,我希望在该包和子包的类的所有公共(public)方法中输出日志消息。所以看第6.2.3.4节

Spring aspect oriented programming

我想我的表情是这样的

执行(public * 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/>

抱歉我的英语,这不是我的母语

最佳答案

为什么要用代理来包装 Controller ?在我看来,这就像重新发明轮子。根据 servlet 规范,如果您想拦截对 servlet 的调用并对请求和/或响应进行一些处理,您应该仔细查看 this

关于java - 我的aspectj模式的方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17564890/

相关文章:

java - org.apache.maven.plugins :maven-surefire-plugin is missing 的“build.plugins.plugin.version”

java - 仅从 Maven 存储库中解压单个依赖项

Java Canvas - Rectangle2D 移动时缩放

java - 在异常处理期间何时使用记录器?

Python - 异步日志记录

java - 内部方法调用方面

java - android ArrayList 迭代器

java - 关于应用程序日志级别的建议

java - Spring中AOP配置相关的一些疑惑

c# - 具有异步/等待的 ContextBoundObject