liguofeng29’s blog

個人勉強用ブログだっす。

Struts2 - タグ - tokenタグ -2重送信防止

Strun2のtokenタグを使い2重送信(多重submit)を防止できる。

1. 入力画面を作成する(2重送信防止する画面)

s-token.jsp

<%@ page contentType="text/html; charset=UTF-8" language="java" errorPage=""%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html>
<html>
<head>
    <title>s:token</title>
</head>
<body>
<h3>s:tokenを使い、2重submit防止する</h3>
<s:form action="pro">
    <s:textfield name="name" label="名前"/>
    <!-- tokenタグ -->
    <s:token/>
    <s:submit value="送信"/>
</s:form>
</body>
</html>

2. action="pro"のActionクラスを作成する

package action;

import com.opensymphony.xwork2.ActionSupport;

public class ProAction extends ActionSupport
{
    private String name;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

3. strut.xmlにactionとinterceptorを追加する

<action name="pro" class="action.ProAction">
    <!-- デフォルトinterceptor -->
    <interceptor-ref name="defaultStack"/>
    <!-- tokenのinterceptor -->
    <interceptor-ref name="token"/>
    <result name="invalid.token">/WEB-INF/content/refresh.jsp</result>
    <result>/WEB-INF/content/show.jsp</result>
</action>

4. 結果JSP show.jsp

<%@ page contentType="text/html; charset=UTF-8" language="java"
    errorPage=""%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html>
<html>
<head>
    <title>2重送信テスト画面</title>
</head>
<body>
    正常に送信されました:${requestScope.name}
</body>
</html>

refresh.jsp

<%@ page contentType="text/html; charset=UTF-8" language="java"
    errorPage=""%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html>
<html>
<head>
    <title>2重送信テスト画面</title>
</head>
<body>
リクエストは既に処理されました。
</body>
</html>

f:id:liguofeng29:20160325121948g:plain