开发包含购买屏幕的网站。我将使用类似于 PAYPAL 的服务。我只需要将POST数据发送到此服务,服务就会照顾它。
问题是,我想隐藏一些字段。因此输入类型隐藏不是一个选项。所以我添加了一个只包含一个数据的简单表单 productId ,然后使用添加的数据重定向POST。
现在问题是,数据是作为URL参数发送的(我可以在浏览器的URL中看到这些值)。我希望这些值(在示例中,userId和reference)作为POST数据。我怎么能做到这一点?
代码:
@RequestMapping(value = "/doPurchase", method = RequestMethod.POST)
public ModelAndView doPurchase(Principal principal, HttpServletRequest request,
@RequestParam(value = "productId", required = true) String productId, RedirectAttributes attributes) {
//
Product product = productRepository.findByProductCode(productId);
//
// DO STUFF...
//
ModelAndView modelAndView = new ModelAndView("redirect:PAYMENT_SERVICE_URL");
attributes.addAttribute("UserId", "USER_ID");
attributes.addAttribute("Reference", "REF_ID");
//
// ETC ETC
//
request.setAttribute(View.RESPONSE_STATUS_ATTRIBUTE, HttpStatus.TEMPORARY_REDIRECT);
return modelAndView;
}
答案 0 :(得分:2)
301
/ 302
无法重定向执行POST请求。
307
可以重复POST请求,但您无法对其进行修改。
参考:
一些绕道方法:
让PAYMENT_SERVICE_URL
接受GET和POST请求。
创建一个中间页面接受重定向的GET请求,并生成一个HTML POST表单到PAYMENT_SERVICE_URL
,然后通过JavaScript自动提交表单。
如果您使用的是SpringFramework
,请考虑使用Flash Attributes
:https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-flash-attributes
如果您确实想要以一般方式隐藏某些参数,可以将值存储在数据库表中,并通过GET请求将行的id
传递到重定向页面,然后加载id
的数据库表中的参数。或者,您可以加密/解密参数。