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>
<%@ 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>