我正在使用后端的Spring和前端的AngularJS编写客户端 - 服务器应用程序。在编写了很多Spring代码后,我想尝试AOP从控制器的方法中提取日志代码。不幸的是,在向项目控制器添加方面后,控制器无法正常工作。
为了描述最简单的情况,有控制器:
@RestController
public class AuthenticationController {
@RequestMapping("/authenticate")
public Principal authenticate(Principal user) {
return user;
}
}
我希望通过Spring Security将Principal注入并发送给客户端 - 这一切都运行良好,在浏览器上可以看到200个代码的响应,并且在数据中有经过身份验证的Principal。
然后我介绍了以下方面:
@Aspect
@Component
public class LoggingAspect {
private static final Logger logger = LoggerFactory.getLogger(LoggingAspect.class);
@Pointcut("execution(* correct.package.path.controllers.impl.*Controller.*(..))")
public void withinControllers() {
};
@Pointcut("@annotation(org.springframework.web.bind.annotation.RequestMapping)")
public void requestMapped() {
};
@Before("withinControllers() && requestMapped()")
public void logBefore(JoinPoint joinPoint) {
logger.debug("Entering {}", joinPoint.getSignature().toShortString());
}
}
执行建议,执行authenticate方法,但在浏览器上可以看到404响应,而不是之前的正确响应。 Eclipse日志没有显示任何错误,我不知道从那里去哪里。
我也注意到,在评论@Before的建议时,只留下@Pointcuts,它运行良好,就像之前一样,但它显然没用,因为我需要建议才能工作。
任何人都可以解释这种行为的原因是什么,我该如何解决?
此致 imralav