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

Kar*_*. V 1 java http-post servlet-filters

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

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

在第二台机器上,请求传递过滤器,并由Resource类中的REST API处理.

@POST
public Response handleRequest(InputStream stream)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

stream对象作为POST请求正文的一部分发送.重定向后,请求正文不会被发送并且stream为空.如何在重定向后保留请求正文(或至少这部分内容)?

谢谢.

Kar*_*. V 6

我发现的另一种方法是307(临时重定向).这保留了原始请求的正文,因此在这种情况下可以正常工作.307重定向具有详见一些安全隐患这里,但没有充当阻挡HTTP请求的代理原始主机的好处.

public void doFilter(...)
{
    ...
    httpResponse.setStatus(TEMPORARY_REDIRECT);
    httpResponse.setHeader("Location", redirectLocation);
    return;
}
Run Code Online (Sandbox Code Playgroud)