【问题标题】:Redirect offsite page with POST instead of GET in JSF在 JSF 中使用 POST 而不是 GET 重定向异地页面
【发布时间】:2011-03-16 17:56:48
【问题描述】:

在我们网站的支付部分,我从银行获得了它的 paymentPage URL 和 paymentID。之后,我必须使用 POST 方法而不是 GET 将客户端浏览器重定向到银行 paymentPage URL。请注意,银行 paymentPage URL 是异地的,它没有与我们的服务器连接。

我在 JSF 1.2 和 Spring 中找不到解决该问题的智能解决方案。一个简单的解决方案是使用以下主体(使用 JavaScript)创建一个简单的 jsf 页面:

<body OnLoad="OnLoadEvent();">
<form action="<%=url %>" method="post" name="form1">
    <input type="hidden" name="PaymentID" value="<%=paymentId %>"  />
</form>
<script language="JavaScript">

function OnLoadEvent() {
   document.form1.submit();
}
</script>

您能否使用 JavaServet API、JSF 和 Spring API 给我任何更好的解决方案?

在我看来,在控制器中我有一个方法proceedToPayment(),我将从ServletContext(或FacesContext)中获取Request 对象。但在那之后我不知道如何使用 POST 方法转发 paymentPage URL。

附:似乎这是一个更普遍的问题。我发现 ASP here 的类似查询。

【问题讨论】:

标签: java javascript jsf spring-mvc


【解决方案1】:

这与 JSF、Spring、PHP、ASP 或任何其他服务器端技术无关。

服务器和客户端之间唯一的通信渠道是 HTTP 标头。并且没有任何标题可以可靠地强制现代浏览器通过 POST 进行重定向。由 Javascript 激活的带有隐藏字段的表单是唯一的选择。

【讨论】:

  • 可以使用 HTTP 307。它只在浏览器上显示安全警告。
  • @BalusC:即使您不介意警告(IE 不会给出任何警告,顺便说一句),我看不出这对这种情况有何帮助。 307 重定向将保留请求正文。而且由于您将无法向请求添加任何参数,因此您必须将它们包含在对服务器的原始 POST 请求中,这意味着您与带有隐藏字段的表单堆叠在一起,这正是我们想要避免的首先(以及可以通过正常重定向避免的情况,您可以在服务器端添加任何 GET 参数)。
  • @BalusC:我不知道。我自己不会介意的。但避免这种形式是问题的重点。 Tsetso 向我们展示了一个使用表单和一些 Javascript 的解决方案,并问道:“你能给我使用 JavaServet API、JSF 和 Spring API 的更好的解决方案吗?”。使用 307 重定向需要相同的表单加上一些服务器端代码。它几乎不能算作“更好的解决方案”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-12
相关资源
最近更新 更多