Class PostResubmitPreventHandler

java.lang.Object
nablarch.fw.web.post.PostResubmitPreventHandler
All Implemented Interfaces:
Handler<HttpRequest,HttpResponse>, HttpRequestHandler

@Deprecated public class PostResubmitPreventHandler extends Object implements HttpRequestHandler
Deprecated.
アプリケーションで実装したほうが分かりやすく簡単に実装できるため、POST再送信を防止するには業務アクションにてリダイレクトのレスポンスを返すことで実現すること。
POST再送信防止ハンドラ。

本ハンドラでは、POSTで受け付けたリクエストに対して、 リダイレクトを使用し、再度リクエストを受け付けることで、 ブラウザの戻るボタンによるPOST再送信を防止する。

リダイレクト後のGETリクエストが複数送信された場合には、HttpErrorResponseを送出する。 HTTPステータスコードには、BadRequestであることを示す400を設定し、 遷移先のパスにはsetForwardPathMapping(Map)で設定されたパスマッピングを元に設定する。
※複数送信されたリクエストのリクエストIDが、マッピング設定のキーから始まっている場合その値を遷移先とする。 リクエストIDが複数のキーから始まっている場合は、最も長いキーに対応する値を遷移先にする。
以下にマッピング例を示す。

setForwardPathMapping(Map)に設定された内容が以下表の場合、 リクエストIDがRW4444の場合は、遷移先のパスは/rw4_error.jspとなる。 リクエストIDがRW3333の場合は、遷移先のパスは/rw_error.jspとなる。

 ----------- -----------------------------
 キー        パス
 ----------- -----------------------------
 R           /r_error.jsp
 R1234       /r1234_error.jsp
 RW          /rw_error.jsp
 RW4         /rw4_error.jsp
 ----------- -----------------------------
 

ただし、multipartリクエストには未対応。

本ハンドラは、NablarchTagHandlerの手前に設定すること。

Author:
Kiyohito Itoh
  • Field Details

    • POST_RESUBMIT_PREVENT_PARAM

      public static final String POST_RESUBMIT_PREVENT_PARAM
      Deprecated.
      POST再送信防止を指示するパラメータ
      See Also:
  • Constructor Details

    • PostResubmitPreventHandler

      public PostResubmitPreventHandler()
      Deprecated.
  • Method Details

    • handle

      public HttpResponse handle(HttpRequest request, ExecutionContext context)
      Deprecated.
      HTTPリクエストに対する処理を実行する。

      処理フローは下記の通り。

       [1]POST再送信防止が指示されたリクエストであるか否かを判定する。
      
           POST再送信防止が指示されたリクエストである場合:
               リクエスト情報をセッションスコープに格納し、
               再度同じURIに対してリダイレクトする。
      
           POST再送信防止が指示されたリクエストでない場合:
               [2]に進む。
      
       [2]POST後にリダイレクトされたリクエストであるか否かを判定する。
      
           POST後にリダイレクトされたリクエストである場合:
               セッションスコープに格納したリクエスト情報をリクエストに設定後、
               後続のハンドラを呼び出す。
      
           POST後にリダイレクトされたリクエストでない場合:
               後続のハンドラを呼び出す。
       
      各処理の詳細については、各メソッドのJavadocを参照。
      Specified by:
      handle in interface Handler<HttpRequest,HttpResponse>
      Specified by:
      handle in interface HttpRequestHandler
      Parameters:
      request - HTTPリクエストオブジェクト
      context - サーバサイド実行コンテキストオブジェクト
      Returns:
      HTTPレスポンスオブジェクト
    • isPostRedirect

      protected boolean isPostRedirect(HttpRequest request)
      Deprecated.
      POST再送信防止が指示されたリクエストであるか否かを判定する。

      下記の条件をすべて満たす場合のみtrueを返す。

       ・HTTPメソッドがPOSTであること
       ・POST再送信防止を指示するパラメータ(POST_RESUBMIT_PREVENT_PARAM)が存在すること
       
      Parameters:
      request - リクエスト
      Returns:
      POST再送信防止が指示されたリクエストである場合はtrue
    • createPostRequest

      protected PostRequest createPostRequest(HttpRequest request)
      Deprecated.
      POST時のリクエスト情報を生成する。

      リクエスト情報として下記を取得する。

       ・リクエストパラメータ
       ・マルチパート
       
      Parameters:
      request - リクエスト
      Returns:
      POST時のリクエスト情報
    • generatePostRequestKey

      protected String generatePostRequestKey(String executionId)
      Deprecated.
      POST時のリクエスト情報をセッションスコープに格納する際に使用するキーを生成する。 キーの形式は下記の通り。
           nablarch_post_request_<実行時ID>
       
      Parameters:
      executionId - 実行時ID
      Returns:
      POST時のリクエスト情報をセッションスコープに格納する際に使用するキー
    • generateRedirectPath

      protected String generateRedirectPath(HttpRequest request)
      Deprecated.
      POST後のリダイレクトに使用するパスを生成する。

      パスの形式は下記の通り。

           redirect://<リクエストURI>?nablarch_post_redirect_id=<実行時ID>
       
      Parameters:
      request - リクエスト
      Returns:
      POST後のリダイレクトに使用するパス
    • isRedirectOnPost

      protected boolean isRedirectOnPost(HttpRequest request)
      Deprecated.
      POST後にリダイレクトされたリクエストであるか否かを判定する。

      下記の条件をすべて満たす場合のみtrueを返す。

       ・HTTPメソッドがGETであること
       ・リダイレクト時に付与したnablarch_post_redirect_idパラメータが存在すること
       
      Parameters:
      request - リクエスト
      Returns:
      POST後にリダイレクトされたリクエストである場合はtrue
    • getPostRequest

      protected PostRequest getPostRequest(HttpRequest request, ExecutionContext context)
      Deprecated.
      リダイレクト前にセッションスコープに格納したリクエスト情報を取得する。

      取得できない場合はnullを返す。

      POST後にリダイレクトされたリクエストを識別するパラメータ、 およびPOSTリクエストのリクエスト情報は、 ともに保持しているマップから削除する。

      Parameters:
      request - リクエスト
      context - 実行コンテキスト
      Returns:
      リダイレクト前にセッションスコープに格納したリクエスト情報。取得できない場合はnull
    • setForwardPathMapping

      public void setForwardPathMapping(Map<String,String> forwardPathMapping)
      Deprecated.
      リクエストIDと遷移先パスのマッピングを設定する。

      MapのキーにはリクエストIDを識別する値を、値には遷移先のパスを設定する。

      Parameters:
      forwardPathMapping - マッピング