Java 检测html文件时,HttpServletResponse内容类型为null
我试图实现JavaServlet过滤器,它修改html响应Java 检测html文件时,HttpServletResponse内容类型为null,java,jsf,content-type,servlet-filters,Java,Jsf,Content Type,Servlet Filters,我试图实现JavaServlet过滤器,它修改html响应 doFilter我的filter类的方法如下所示: public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { if (filterConfig == null) { return; } HttpSe
doFilter
我的filter类的方法如下所示:
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
)。在我的浏览器的开发工具中,我可以看到“内容类型”标题的值为“text/html”;charset=UTF-8',但在这种情况下为什么res.getContentType()
返回null
有没有其他方法可以检测过滤器中的HTML响应
编辑我在if子句中添加了chain.doFilter(req,res)
调用
由于JSF使用的是一个servlet,因此您只能检查它在链之后生成的内容(您似乎希望它在过滤器之前执行,但事实并非如此)。这是因为完整的过滤器链总是在servlet之前执行,请参见
doFilter(…)
中,只有在chain.doFilter(…)
之后才能访问响应,如第一个链接所示
因此,除非过滤器创建内容(它不应该iirc,至少不是真实内容),否则在调用chain.doFilter()
之前,响应上的内容类型将始终为空(除非过滤器例如创建了身份验证/授权失败响应)
实际上,您的代码正在执行
String a=null;
if (a != null || or a.equals("b") {
doThing();
}
因此,你似乎有一个新的想法,所以你必须重新考虑你的设计。(您试图实现什么)@BalusC
chain.doFilter(req,res)
被调用(请参阅编辑的代码),但我认为应该在if子句之前调用它,对吗@ℛ当然要注意为什么。。。我正在尝试获取响应内容并对其进行修改,我需要请求内容做什么?感谢您的解释。我将chain.doFilter(…)
移动到res.getContentType()
之前,它就工作了。