我在两台主机上部署了一个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请求正文的一部分发送。重定向之后,请求正文不会发送过来,流
为空。如何在重定向之后保留请求正文(或至少保留请求正文的这一部分)?
谢了。
我发现另一个可行的方法是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