@Documented @Target(value=METHOD) @Retention(value=RUNTIME) @Interceptor(value=OnDoubleSubmission.Impl.class) @Published public @interface OnDoubleSubmission
Interceptor
。
業務アクションハンドラのメソッドに付与することで、二重サブミット(同一リクエストの二重送信)のチェックを行う。
本インターセプタを使用するためには、トークン設定が必要である。
トークン設定はトークンの生成とHTMLへの埋め込みがある。
トークンの生成はUseToken
でできる。
HTMLへの埋め込みはリクエストに格納されたトークンをテンプレートエンジンでinput要素を組み立てればよい。
Thymeleafの例を示す。
<input type="hidden" name="nablarch_token" th:value="${nablarch_request_token}"/>
JSPを使用している場合はn:formタグでトークンを設定できる。
<n:form useToken="true">
<n:submit type="button" value="Submit" uri="/XXXXX" allowDoubleSubmission="false">
</n:form>
本インターセプタは、業務アクションハンドラに次のように実装する。
@OnDoubleSubmission(path = "XXX.jsp")
@OnError(type = ApplicationException.class, path = "forward://XXX.html") public HttpResponse handle(HttpRequest req, ExecutionContext ctx) { // 省略 }
Modifier and Type | Optional Element and Description |
---|---|
java.lang.String |
messageId
二重サブミットと判定した場合の遷移先画面に表示するエラーメッセージに使用するメッセージIDを返す。
個別にメッセージIDを変更する場合に指定する。 デフォルトでは、アプリケーション設定一覧表_presetで設定したエラーメッセージが使用される。 |
java.lang.String |
path
二重サブミットと判定した場合の遷移先のリソースパスを返す。
個別に遷移先を変更する場合に指定する。 リソースパスは必須項目であり、指定しなかった場合は NullPointerException が発生する。 |
int |
statusCode
二重サブミットと判定した場合のレスポンスステータスを返す。
個別にレスポンスステータスを変更する場合に指定する。
デフォルトでは、
BasicDoubleSubmissionHandler のフィールドに定義されている400を返す。 |
public abstract java.lang.String path
NullPointerException
が発生する。public abstract java.lang.String messageId
public abstract int statusCode
BasicDoubleSubmissionHandler
のフィールドに定義されている400を返す。