仅在单击“提交”按钮后,才需要重定向到页面,但无需直接在地址栏中输入网址.如果直接在地址栏中输入,则应显示主页.
我使用session.getAttribute来完成上述过程.我正在考虑是否有任何替代方案,因为我需要为每个post方法执行此操作…
下面的方法适用于第一页,在这里我创建了一个会话属性,该属性将在下一页中使用.
@RequestMapping(value = "/payment", method = RequestMethod.POST)
public String submitForPayment(@ModelAttribute("deposit") Deposit deposit, ModelMap model, HttpServletRequest request) throws IOException
{
try {
HttpSession sessionForNextPage = request.getSession(true);
sessionForNextPage.setAttribute("vNumber",
deposit.getValidityNumber());
return "redirect:success";
} catch (NullPointerException exception) {
return "redirect:payment";
}
}
下面的方法用于使用上面声明的会话的下一页.
@RequestMapping(value = "/success", method = RequestMethod.GET)
public String showSuccess(ModelMap model, HttpServletRequest request)
{
try {
view = "success";
HttpSession session = request.getSession(false);
int vNumber = (int) session.getAttribute("vNumber");
System.out.println(vNumber);
if (vNumber != 0) {
request.getSession(false).removeAttribute("vNumber");
return view;
}
else
return "pay";
} catch (Exception e) {
return "redirect:pay";
}
}
还有其他方法可以执行此操作,因为我必须对所有方法都执行此操作…
解决方法:
每当我必须执行帖子提交时,我总是使用中间页面来捕获POST数据并将数据存储在数据库中,并将记录键存储在会话中,并将其重定向到显示页面,如果该页面存在,我会在其中检查记录ID然后我从数据库中检索数据并显示它,如果不显示错误消息.
因此,即使有人直接访问您的显示页面(在URL中键入)也会显示错误msg,并且在大多数情况下,人们不会看到中间页面的URL,但是即使他们这样做,您也可以为HTML表单使用随机标记并存储在会话中并在中间页上对其进行验证.
希望这会帮助你.
标签:spring,java,spring-mvc
来源: https://codeday.me/bug/20191127/2074083.html