3

我只需要在单击提交按钮后重定向到一个页面,而不是直接在地址栏中输入 url。如果直接在地址栏中输入,那么它应该显示主页。

我正在使用 session.getAttribute 来完成上述过程。我在想是否有任何替代方法,因为我需要为每个发布方法都这样做......

下面的方法适用于第一页,我在其中创建了一个会话属性,用于下一页。

 @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";
        }
    }

有没有其他方法可以做到这一点,因为我必须对所有方法都这样做......

4

2 回答 2

3

每当我必须进行 post 提交时,我总是使用中间页面来捕获 POST 数据并将数据存储在数据库中并将记录密钥存储在会话中并将其重定向到显示页面,在那里我检查记录 ID(如果存在)然后我从数据库中检索数据并显示它,如果不显示错误消息。

因此,即使有人直接访问您的显示页面(输入 url),它也会显示错误消息,并且在大多数情况下,人们不会看到中间页面 url,但即使他们看到,您也可以为您的 html FORM 和存储使用随机令牌在会话中并在中间页面上验证它。

希望这会帮助你。

于 2012-10-31T10:25:02.427 回答
0

使用拦截器并在拦截器方法中确定引荐来源网址。为您需要拦截的每个操作或某些操作调用拦截器。

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.
    }
}

这将起作用。

于 2012-11-04T07:10:18.217 回答