gpt4 book ai didi

java - 在 doFilter 之后更新响应

转载 作者:行者123 更新时间:2023-11-29 03:42:05 25 4
gpt4 key购买 nike

我希望在 doFilter() 函数完成运行后添加一个 HTTP header 。

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

try {
chain.doFilter(request, httpResp);

} finally {
httpResp.setHeader("ADD A HEADER: ", "HEADER");
}
}

doFilter 似乎刷新了响应。


更新:

谢谢。查看 IgorMadjeric 和 richardtz 的答案后,我决定尝试 Response wrapper:


这是包装器:

public class BufferedHttpServletResponse extends HttpServletResponseWrapper {

public BufferedHttpServletResponse(HttpServletResponse response) {
super(response);
}

public void flushBuffer() {
System.out.println("flush");
}

这是修改后的代码:

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

try {
BufferedHttpServletResponse bufferedResponse = new BufferedHttpServletResponse(httpResp);
chain.doFilter(request, bufferedResponse);

} finally {
bufferedResponse.setHeader("ADD A HEADER: ", "HEADER");
}
}

还是不行。我做错了什么吗?

最佳答案

一旦刷新/提交(已发送给客户端),您就无法修改 header 的响应。

doFilter 不会刷新响应,但在执行请求时有很多事情可能会导致它。(显式调用 response.flush(),响应中的主体太大),您无法控制它。

但是,您可以使用 HttpServletResponseWrapper 来更改它。

希望对您有所帮助。

关于java - 在 doFilter 之后更新响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12685848/

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