gpt4 book ai didi

java - 检测 html 文件时 HttpServletResponse 内容类型为 null

转载 作者:行者123 更新时间:2023-12-01 21:57:52 25 4
gpt4 key购买 nike

我正在尝试实现 Java servlet 过滤器,它可以修改 html 响应。

我的过滤器类的

doFilter 方法如下所示:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
if (filterConfig == null) {
return;
}

HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;

String contentType = res.getContentType();

if (contentType != null && contentType.contains("text/html")) {
chain.doFilter(req, res);
// do some modification
}
}

对于每个响应,我都会尝试判断它是否是 HTML。如果是这样的话,我做了一些修改,但出现以下问题:请求jsf文件时,res.getContentType()返回null(res.getHeader ("Content-Type") 也返回 null)。在我的浏览器的开发人员工具中,我可以看到“Content-Type” header 的值为“text/html;” charset=UTF-8',但是为什么在这种情况下 res.getContentType() 返回 null 呢?

还有其他方法可以检测过滤器中的 HTML 响应吗?

编辑我在 if 子句中添加了 chain.doFilter(req, res) 调用。

enter image description here

最佳答案

由于 JSF 使用 servlet,因此您只能检查它在链之后生成的内容(您似乎期望它在过滤器之前执行,但事实并非如此)。这样做的原因是,完整的过滤器链始终在 servlet 之前执行,始终参见

这意味着,在 doFilter(...) 中,您只能在 chain.doFilter(..)<之后访问响应。/code> 在您的代码中,如第一个链接所示。

因此,除非过滤器创建内容(它不应该iirc,至少不是真正的内容),否则响应上的内容类型始终chain.doFilter() 被调用(除非过滤器创建了身份验证/授权失败响应)。

实际上你的代码正在做

String a=null;
if (a != null || or a.equals("b") {
doThing();
}

因此,您似乎有一个 http://www.xyproblem.info所以你必须重新考虑你的设计。 (你想实现什么目标)

关于java - 检测 html 文件时 HttpServletResponse 内容类型为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58728244/

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