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

如何在从servlet过滤器执行HTTP重定向时保留请求正文

平庆
2023-03-14

我在两台主机上部署了一个Java web应用程序,前面有一个servlet过滤器。我向一台主机上的应用程序发送了一个POST请求,该请求被过滤器拦截并重定向到另一台主机:

public void doFilter (ServletRequest request, ServletResponse response,
       FilterChain filterChain)
{
    ...
    if(shouldRedirect) {
        httpResponse.sendRedirect(redirectLocation);
    }
}

在第二台机器上,请求通过过滤器并由资源类中的REST API处理。

@POST
public Response handleRequest(InputStream stream)
{
    ...
}

对象作为POST请求正文的一部分发送。重定向之后,请求正文不会发送过来,为空。如何在重定向之后保留请求正文(或至少保留请求正文的这一部分)?

谢了。

共有1个答案

梁丘璞瑜
2023-03-14

我发现另一个可行的方法是307(临时重定向)。这保留了原始请求的主体,因此在本例中有效。307重定向有一些安全问题,如这里详细描述的,但是没有原始主机充当阻塞HTTP请求的代理的好处。

public void doFilter(...)
{
    ...
    httpResponse.setStatus(TEMPORARY_REDIRECT);
    httpResponse.setHeader("Location", redirectLocation);
    return;
}
 类似资料:
  • 问题内容: 我正在尝试找到一种方法,可将请求从过滤器重定向到登录页面,但我不知道如何从servlet重定向。我搜索了,但发现的是方法。我在过滤器的响应对象上找不到此方法。是什么原因 我该如何解决? 问题答案: 在Filter中,响应是而不是。因此将强制转换为。 如果使用上下文路径: 也不要忘记在最后打电话。

  • 我试图记录应用程序中的每个传入请求和传出响应。我正在使用jee 6,所以我没有ContainerRequestFilter和ContainerResponseFilter类。所以我决定用滤镜。 我用@WebFilter(“/*”)注释了一个类,并实现了Filter接口。我成功地读取了请求头和请求正文。我也很难阅读响应标题和响应正文。下面是代码片段 MyHttpServletResponse seW

  • 问题内容: 我正在与现有的servlet集成,该servlet从HTTP标头中提取一些属性。基本上,我实现的接口无法访问实际请求,它只能访问HTTP标头的k-> v映射。 我需要传递一个请求参数。计划是使用servlet过滤器从参数到标头值,但是HttpServletRequest对象当然没有addHeader()方法。 有任何想法吗? 问题答案: Extend ,覆盖标头吸气剂以返回参数: ..

  • 我有一个servlet过滤器类。在doFilter函数中,我希望在chain.doFilter(请求,响应)调用之后重定向到一个自定义URL。

  • 我将在一个已经存在的网站中介绍Spring Web Security。现在出现了一个问题: 我希望我的自定义筛选器在Spring Security筛选器链之前在Tomcat筛选器链中执行。我不想让他们成为这个Spring安全过滤器链的一部分。 我所找到的只是Spring Boot中的一个解决方案(请参见“Spring-How to insert a filter before SpringSecu

  • 问题内容: 我想要的是从具有HTTP(例如jQuery的AJAX)请求的API到外部api的对象。我该如何开始?我曾对Google先生进行过调查,但找不到任何帮助。 我开始怀疑这是否可能?在这篇文章中,Laravel4发出了从控制器到外部url的发布请求,并发出了看起来可以完成的数据。但是没有示例,也没有任何来源可以找到一些文档。 请帮帮我吗? 问题答案: 看看Guzzle