gpt4 book ai didi

Java Servlet Filter - 根据状态修改响应头

转载 作者:行者123 更新时间:2023-11-30 10:33:41 25 4
gpt4 key购买 nike

我正在尝试编写一个 servlet 过滤器,它会根据请求的状态将 header 添加到响应中。我知道我必须在传递给 chain.doFilter 之前用 HttpServletResponseWrapper 包装响应,但是 header 永远不会发送,所以我显然遗漏了一些非常明显的东西。

代码看起来像这样:

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
{
HttpServletResponse httpServletResponse = (HttpServletResponse) response;
HttpServletResponseWrapper responseWrapper = new HttpServletResponseWrapper(httpServletResponse);

chain.doFilter(request, responseWrapper);

if(responseWrapper.getStatus() < 400)
{
responseWrapper.addHeader("X-Custom-Foobar", "abc");
}
}

我是否必须在包装器中捕获某些内容以防止响应在检查完成之前发送到客户端?

最佳答案

所以这个规范令人沮丧的部分是你必须完全拦截 ServletOutputStream 并缓冲它。我最终按照这里的例子::https://stackoverflow.com/a/11027170/76343

基类 HttpServletResponseWrapper 是一个完整的传递,一旦输出流关闭,对响应的所有进一步修改都是静音的。

不幸的是,似乎没有更优雅的方法来完成此任务。

关于Java Servlet Filter - 根据状态修改响应头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42100283/

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