当前位置: 首页 > 知识库问答 >
问题:

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

梁丘高朗
2023-03-14

我试图实现JavaServlet过滤器,它修改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()返回nullres.getHeader(“Content Type”)也返回null)。在我的浏览器开发工具中,我可以看到“Content Type”标题的值为“text/html”;charset=UTF-8',但在这种情况下,res.getContentType()为什么返回null

有没有其他方法来检测过滤器中的超文本标记语言响应?

编辑我添加了链。doFilter(req,res)if子句中的调用。

共有1个答案

袁华清
2023-03-14

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

  • doFilter()是在Servlet完成工作之前还是之后执行的

这意味着在你的doFilter(…) 只有在链之后访问响应时,才能访问响应。doFilter(…) 在您的代码中,如第一个链接所示。

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

实际上你的代码

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

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

 类似资料:
  • 我一直试图仅使用文件内容检测MIME类型,使用Apache Tika Core和Apache Tika Parser1.23 jars。下面是用于相同内容的代码: Tika无法检测扩展名为。tmp(text/plain file)和iso-8859-1字符集的文件的内容类型,内容如下: èé 通过以下方式正确检测具有相同配置和以下内容的文件: 000000000000000000000000000

  • 让我们创建一个Potion文件作为插件的测试样本。 :::text factorial = (n): total = 1 n to 1 (i): total *= i. total. 10 times (i): i string print '! is: ' print factorial (i) string print

  • 问题内容: 我正在使用Selenium 2 Java API与网页进行交互。我的问题是:如何检测链接目标的内容类型? 基本上,这是背景:单击链接之前,我想确保响应是HTML文件。如果没有,我需要以其他方式处理它。因此,假设有一个PDF文件的下载链接。应用程序应直接读取该URL的内容,而不是在浏览器中打开它。 我们的目标是拥有一个能够自动知道当前位置是HTML,PDF,XML或其他类型的应用程序,以

  • 我使用spring JAX-RS将文件作为多部分表单数据上传。我有inputstream对象作为参数。当我将这个输入流复制到磁盘时,我得到了我的文本文件。 但是当我试图检测这个输入流的内容类型时,我得到的内容类型是application/octet-stream。 作为一个测试,我还用tika desktop测试了相同的文件,并获得了正确的内容类型。

  • MIME标准 多用途Internet邮件扩展(MIME)标准是用于标识文档类型的最佳可用标准。 这些标准的知识有助于浏览器在内部交互过程中。 每当浏览器遇到媒体文件时,它就会选择一个可用的兼容软件来显示其内容。 如果它没有任何合适的应用程序来运行特定的媒体文件,它建议用户为它获取合适的插件软件。 Tika中的类型检测 Tika支持MIME中提供的所有Internet媒体文档类型。 每当文件通过Ti