我只需在点击提交按钮后重定向到某个页面,但不能直接在地址栏中输入网址。如果直接在地址栏中键入,则应显示主页。
我使用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";
}
}
还有其他方法可以做到这一点,因为我必须为所有方法做到这一点......
答案 0 :(得分:3)
每当我必须提交帖子时,我总是使用中间页面捕获POST数据并将数据存储在数据库中并将记录密钥存储在会话中并将其重定向到显示页面,我在其中检查记录ID如果它在那里然后我从DB检索数据并显示它,如果没有显示错误消息。
因此,即使有人直接访问您的显示页面(键入url),它也会显示错误消息,并且在大多数情况下,人们将看不到中间页面网址,但即使他们这样做,您也可以使用随机令牌来获取您的HTML表格并存储在会话中并在中间页面上验证。
希望这会对你有所帮助。
答案 1 :(得分:0)
使用拦截器并在拦截器方法中确定引用者URL。 为每个动作或您需要拦截的一些动作调用拦截器。
public class AppInterceptor extends HandlerInterceptorAdapter{
//before the actual handler will be executed
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
return true;
}
//after the handler is executed
public void postHandle(HttpServletRequest request, HttpServletResponse response,
Object handler, ModelAndView modelAndView) throws Exception {
String referrer = request.getHeader("referer");
// if the referrer string is null, it means the url is invoked by typing into address bad and then you can decide of redirecting user to home page.
}
}
这样可行。