3

送信ボタンをクリックした後でのみページにリダイレクトする必要がありますが、アドレスバーにURLを直接入力する必要はありません。アドレスバーに直接入力した場合は、ホームページが表示されます。

Iamは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";
        }
    }

私はすべてのメソッドに対してこれを行わなければならないので、これを行う他の方法はありますか...

4

2 に答える 2

3

投稿送信を行う必要があるときはいつでも、中間ページを使用して POST データをキャプチャし、データをデータベースに保存し、レコード キーをセッションに保存して表示ページにリダイレクトし、そこでレコード ID があるかどうかを確認します。次に、DBからデータを取得し、エラーメッセージが表示されない場合は表示します。

したがって、誰かが表示ページに直接アクセスしても (URL を入力)、エラー メッセージが表示されます。ほとんどの場合、中間ページの URL は表示されませんが、表示された場合でも、HTML フォームとストアにランダム トークンを使用できます。セッションで、中間ページでそれを検証します。

これがあなたを助けることを願っています。

于 2012-10-31T10:25:02.427 に答える
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.
    }
}

これは機能します。

于 2012-11-04T07:10:18.217 に答える