当前位置: 首页 > 面试题库 >

如何编写响应过滤器?

吉凯捷
2023-03-14
问题内容

有没有办法只处理过滤器中的响应。

下面编写的代码是否正确?

  public void doFilter(request , response , chain) {
        //code to handle request 
          chain.doFilter(request, response);
        //code to handle response .
  }

问题答案:

这取决于您想要什么。通常,您的样本虽然不正确。之后chain.doFilter又回来了,这是来不及做的任何回应。此时,整个响应已发送到客户端,您的代码无法访问它。

您需要做的是包装request和/或包装response到您自己的类中,将这些包装传递给doFilter方法,并处理包装中的所有处理。

为了使其更容易,servlet api中已经提供了包装器:seeHttpServletRequestWrapper和HttpServletResponseWrapperclasses。如果要处理实际发送到客户端的输出,则还需要编写自定义OutputStream或Writer包装器,并从HttpServletResponse包装器返回这些包装器。是的,很多包装:)

一些更简单的过滤器可以在不包装请求或响应的情况下工作:例如,在调用之前doFilter,您已经可以访问请求标头,或者可以在不调用的情况下发送自定义响应doFilter。但是,如果要处理请求正文,则不能只读取它,否则它将无法用于链的其余部分。在这种情况下,您需要再次使用包装技术。



 类似资料:
  • Servlet 过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息。 可以将一个或多个 Servlet 过滤器附加到一个 Servlet 或一组 Servlet。Servlet 过滤器也可以附加到 JavaServer Pages (JSP) 文件和 HTML 页面。调用 Servlet 前调用所有附加的 Servlet 过滤器。 Servlet 过滤器是可用于 Servlet

  • 我有下面的servlet过滤器。

  • 我有一个如下的控制器, 我有另一个这样的控制器, 我的结果结构如下: 这扩展了结果类: 现在,我将要设置到结果字段中的模型是, 现在,对于上面提到的TestController,我想显示json响应中的所有字段,而在SecondTestController中,我想屏蔽(不显示)json响应中的age属性。在Spring我该如何实现这一点。非常感谢任何帮助!

  • 我需要在每个响应中添加标题。我正打算在下面做 我想在之后这样做,以便一旦控制器处理它,我只是在返回客户端之前添加标头。是正确的吗? 但如何编写响应过滤器? 在已返回,对响应执行任何操作都为时已晚。此时,整个响应已经发送到客户端,您的代码无法访问它。 我觉得上面的说法不对。我不能在过滤链之后添加标题。doFilter(请求、响应)?如果不是,为什么? 我使用的是spring mvc。

  • 问题内容: 使用Zuul作为过滤器的代理时,如何读取响应正文? 我试图像这样调用代码: 问题答案: 我设法克服了这一点。该解决方案包括4个步骤: 读入ByteArrayOutputStream 将OutputStream复制到2 InputStreams。 使用其中之一进行自定义。 使用第二个重新分配上下文: 从点1读取流将导致无法再次读取该流,因此,您将传递尚未读取的新的新鲜流

  • 问题内容: 在ES中是否在查询之前应用了过滤器? 举例来说,我正在做一个非常缓慢的模糊搜索,但是我只是在很小的日期范围内进行。例如,您可以看下面的(PHP): 在尝试进行较慢的搜索之前,是否会应用过滤器? 逻辑将要求先运行筛选器,然后再运行查询,但是我想确定一下。 问题答案: 如果使用-query,则会在对文档计分之前应用过滤器。 通常,这会大大加快速度。但是,模糊查询将仍然使用输入来构建更大的查