Java 使用AspectJ spring添加响应头

Java 使用AspectJ spring添加响应头,java,spring,header,annotations,aop,Java,Spring,Header,Annotations,Aop,我正在尝试向java应用程序中的所有响应添加一个响应头,为此我使用AspectJ 换句话说,我想做的是,在返回响应之前(以及构建响应之前),我想添加一个头响应,因此通过添加@PointCut和@AfterReturning,我试图捕获响应以添加头 问题是我尝试过调试,但没有达到方面,可能@PointCut executtion语法不好 使用@AfterReturning对我有帮助吗 谢谢你的帮助,杰 这是我的密码: 以这种方式返回对客户端的响应: public Response getCusto

我正在尝试向java应用程序中的所有响应添加一个响应头,为此我使用AspectJ

换句话说,我想做的是,在返回响应之前(以及构建响应之前),我想添加一个头响应,因此通过添加@PointCut和@AfterReturning,我试图捕获响应以添加头

问题是我尝试过调试,但没有达到方面,可能@PointCut executtion语法不好

使用@AfterReturning对我有帮助吗

谢谢你的帮助,杰

这是我的密码:

以这种方式返回对客户端的响应:

public Response getCustomer(...) {
...
return Response.ok(costumers).build();
}
方面类:

@Aspect
public class MyAspect {


    @AfterReturning(
            pointcut="execution(public Response *.*(..)",
            returning="response")
    public void updateStatisticsResponseHeader(JoinPoint joinPoint, Object response) {

        long longEndTime = System.currentTimeMillis();


        Response resp1 = (Response) response;
        Object startTime  = resp1.getMetadata().get("start-time");
        long longStartTime = (long)startTime;
        long totalTime = longEndTime - longStartTime;

        Response.ResponseBuilder responseBuilder = Response.fromResponse(resp1);
        responseBuilder.header("total-time",String.valueOf(totalTime));

        responseBuilder.build();

    }

}
beans.xml:

<bean id="MyAspect" class="com.project.aspect.MyAspect"/>


您确定要为此使用aop吗?考虑使用servlet过滤器。当然,如果您使用的是servlets.Hi,我使用的是servlets是的,但是我需要在响应返回给用户之前将其头部添加到响应中。我试图返回用户收到响应之前花费的总时间。因此,您可以将该标题添加到过滤器链中最后添加的过滤器中。在该过滤器中,在调用chain.doFilter(..)后设置头。这里的例子是@pomkine,我需要在返回响应之前设置报头,因为我需要在请求上花费的总时间,还因为像getCustomer(…)等方法有一些逻辑,可能需要一段时间才能继续。并且将其放在chain.doFilter()之后不会设置头,因为它已返回到客户端。