AOP建议打破了控制器

时间:2015-11-07 18:21:49

标签: spring aop http-response-codes

我正在使用后端的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

0 个答案:

没有答案