Mik*_*ike 5 java redirect http jersey
我正在开发一个使用Jersey的网络应用程序.我正在尝试使用URIBuilder和seeOther响应实现一个post-post-post类的东西.目的是重定向到浏览器已经使用的相同URI,但强制执行GET.它有点像这样:
应该发生的事情是浏览器选择303 See Other并对它收到的URI执行GET.不幸的是,正在发生的是它在URI上执行PUT(据我所知)并且PUT将其发送回上面的步骤1.导致重定向循环.
任何想法在这里出了什么问题?
private Response giveSeeOther(){
/*Get the base URI builder*/
final UriBuilder uriBuilder = m_uriInfo.getBaseUriBuilder();
/* Some stuff to create the URI */
final Map<String, Object> parameterMap = new HashMap<String, Object>();
parameterMap.put("uid", getUid());
final URI redirectUri = uriBuilder.path(SomeObject.class).
path(SomeObject.class, "get").
buildFromMap(parameterMap);
/* See Other (303) */
return Response.seeOther(redirectUri).build();}
Run Code Online (Sandbox Code Playgroud)
这是看其他方法的代码.我不确定您可能想看到的其他代码,但请告诉我.
小智 8
您需要使用301 HTTP响应代码.
通过使用303,您的POST请求得以维护,并相应地重定向.使用301,您的请求通过GET"永久移动".
对于可能想知道为什么有人想要这样做的其他读者,可以通过使用其Web浏览器的"重新加载"功能(具有"腐烂通信"问题的用户经常这样做)来阻止用户多次提交他们的POST数据重新加载可能没有完全加载的"谢谢"页面.
提示:当您以这种方式重定向时,如果您没有使用cookie来确保信息进入"谢谢"页面,那么您需要以与常规GET表单相同的方式向您的请求添加一个或多个参数将.例如,如果订单ID号是82838,您可以将其传递到"谢谢"页面,如下所示:
http://www.example.com/order/thank-you.pl?orderid=82838
这有明显的潜在安全问题,通过让您的"谢谢"页面代码在显示订单状态之前检查订单ID实际属于当前登录用户(我假设您希望包含订单状态信息),可以轻松解决这些问题.在那个"谢谢"页面上 - 在这种情况下,包括一个"刷新"按钮{或链接}以供用户检查订单状态也是很好的,如果它是在短期内超过一定数量的进展脚步).
我希望这对你有所帮助.