我有一个使用post signin.html提交用户名和姓氏的表单

 @RequestMapping(value="/signin.html",method = RequestMethod.POST)
 public ModelAndView submit(@Valid User user){
    ModelAndView mv = new ModelAndView("redirect:signin.html");
    //Business logic with user account
    return mv;
 }

为了解决双重提交问题,我使用get请求重定向到相同的映射。
 @RequestMapping(value="/signin.html",method = RequestMethod.GET)
 public ModelAndView submitPRG(){
     ModelAndView mv = new ModelAndView("submitted");
     mv.addObject("message", "Submitted Correctly");
     return mv;
 }

这样我就解决了双重提交的问题。
我有几个问题:
1)如何知道get request on/signin.html来自重定向,而不是用户在浏览器中请求的?我只想关闭选项,让用户浏览http://server/signin.html并获得“提交正确”的消息。我知道我可以添加/signin.html之类的内容吗?提交=正确,但我想让它更干净。
2)是否有任何方法可以将ModelAndView对象从submit()传递到submitPRG()
或者简单地说,在这种情况下有没有其他的方法来使用prg?

最佳答案

我怎么知道那个请求
/来自重定向和
用户未在浏览器中请求?
你可以在他们的会话中存储一个标记
查看HTTP头中的引用
我建议对“提交正确”的消息使用某种基于会话的消息。这有时被称为“闪光”。StackExchange始终使用这些信息(显示在屏幕顶部的消息)。
事先谢谢你,但是我怎么能
从httpservletrequest获取引用程序?

HttpServletRequest.getHeader("Referer")

07-28 00:58
查看更多