gpt4 book ai didi

java - 获取用于记录的 ServletResponse 内容字符串

转载 作者:行者123 更新时间:2023-11-30 07:23:14 24 4
gpt4 key购买 nike

我有一个由 Java Spring 开发的 RESTful 服务。我创建了一些用于身份验证的过滤器,在我需要记录传入请求和传出响应的过滤器之一中获取一些自定义 header 等。现在我一直在记录响应。这是过滤器

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException 

servletResponse是我需要获取内容的对象。

我知道有一些重复的问题已经得到解答,但由于某种原因,这些问题都不适合我。

我有一个filter并在 doFilter chain.doFilter之后的方法我想记录响应内容。

我可以看到JSON当我检查 response 时对象在outputStream或在 writer 。但我无法以编程方式获取它。

有人可以帮我解决这个问题吗?预先感谢您!

以下是我使用过但没有帮助的链接:

How to read and copy the HTTP servlet response output stream content for logging

Capture and log the response body

Logging response body (HTML) from HttpServletResponse using Spring MVC HandlerInterceptorAdapter

最佳答案

对于自定义解决方案,这就是想法。

在过滤器中,您需要包装响应并拦截 servlet 的输出,以便您可以编写它。

public void doFilter(ServletRequest request, 
ServletResponse response,
FilterChain chain) throws ServletException, IOException {

// Wrap the response
MyResponseWrapper responseWrapper =
new MyResponseWrapper((HttpServletResponse) response);

chain.doFilter(request, responseWrapper);
}

其中 MyResponseWrapper 是一个类,您可以在其中拦截对输出流的所有调用

public class MyResponseWrapper implements HttpServletResponse {
private HttpServletResponse response;
private ServletOutputStream outputStream;
private MyOutputStreamCopier myOutputStreamCopier;

public MyResponseWrapper(HttpServletResponse response) {
this.response = response;
}

// Implements all needed methods

// Write methods like the following to redirect output to your logs
public ServletOutputStream getOutputStream() throws IOException {
if (outputStream == null) {
outputStream = getResponse().getOutputStream();
copier = new MyOutputStreamCopier(outputStream);
}

return copier;
}
}

其中MyOutputStreamCopier是一个自定义类,它扩展了ServletOutputStream并将所有写入复制到本地缓冲区(或直接将其记录到日志文件)。

<小时/>

如果您喜欢已经构建的解决方案,请查看此 link

关于java - 获取用于记录的 ServletResponse 内容字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37203284/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com