使用Spring MVC中的POST参数重定向到外部URL

时间:2016-01-25 10:35:21

标签: java spring

对于某些订阅流程,有以下要求:

  1. 用户访问我们的网站
  2. 对于任何订阅过程,用户单击应将视图重定向到具有POST参数的指定外部URL的相关部分。
  3. 外部方处理订阅
  4. 可以使用<form/>定义method = POST并将所有必需参数放在隐藏字段中来解决。

    但是,我们已经安装了CMS,因此将现有视图更改为支持<form/>会非常麻烦。

    我希望可以通过以下方式提供一些解决方案:

    1. 用户访问该页面
    2. 用户点击相关部分并将请求发送到我们的内部映射(以及一些ID)。
    3. 使用该ID,将准备相关的有效负载,并将视图重定向到外部URL以及该有效负载(使用POST)。
    4. 如需更多信息,请与我们联系。

2 个答案:

答案 0 :(得分:0)

Spring Documentation中所述,您可以返回s.th.比如控制器中的redirect:http://myhost.com/some/arbitrary/path。要动态执行此操作,请使用以下

@RequestMapping("/redirect")
protected String redirect(@RequestParam("url") String url) 
{
    return "redirect:" + redirectUrl;
}

当然,您可以自己实现一个特殊的RedirectService,但这应该很简单。

无法使用重定向将有效负载发送到另一个端点。重定向是响应代码为301,302,303,307,308的HTTP响应 - 每个都有不同的意图(有关其他信息,请参阅Wikipedia Statuscode)。客户有责任决定下一步做什么 - 例如使用相同的有效负载调用新位置。

答案 1 :(得分:0)

我想出了执行所需用例的方法。

要使用POST参数重定向视图,请参阅以下步骤

1)用户点击链接 2)首先将用户重定向到内部映射。(在重定向到外部端点之前,这将是一个中间GET请求)。 将所有必需参数附加到此端点 3)然后将视图转移到间歇表单页面,填充隐藏标签中的所有字段 4)加载页面后,使用POST方法将此表单提交到所需目的地。

通过这种方式,我们可以破解这一点。我认为这不是一种干净的方式,但如果我们必须这样做,就可以这样做。