再び・トランザクショントークン。
鉄は熱いうちに打て。
そんな訳で、木曜日に会社から退散しようと思ったら
丁度、同僚さんの席にて流れていたMLに
私宛のご指示を見かけたような見かけてないような。
ん?んあ?じっくり読めなかったけど、これかな?
「トランザクショントークン」
そんな訳で、久々のトランザクショントークンです。
今回は、それをJSPで実装です。
出来ないこたないだろう…と思ってましたが、
念の為、ローカルでテストしてみました。
ちなみに今回はランダム文字列生成に RandomStringUtils は使わないで
sessionID + 現在の時刻(ミリ秒) を uniqKey としてみました。
それにしても、久々の Java は、いろいろ忘れていて大変。
もっと復習しないとな。
■前提
・ページA.jsp 上でフォームを用意。
・ページA.jsp 上でサブミットボタンを連打。
・ページB.jsp 上に結果が表示される。
・サブミットボタンが二重押しされている場合はNG、そうでなければOK
■ページA.jsp
<%@ page language="java" pageEncoding="Windows-31J" contentType="text/html; charset=Windows-31J" %>
<%@ page import="java.lang.*" %>
<%
String uniqKey = session.getId() + String.valueOf(System.currentTimeMillis());
session.setAttribute("uniqKey", uniqKey);
%>
<html>
<body>
<form method="post" action="ページB.jsp">
name: <input type="text" name="name" />
<input type="hidden" name="uniqKey" value="<%= uniqKey %>" />
<input type="submit" value="submit!" />
</form>
<a href="/JspTest/jsp/ページB.jsp?uniqKey=<%= uniqKey %>&name=test">submit! with "test" String as name</a>
</body>
</html>
■ページB.jsp
<%@ page language="java" pageEncoding="Windows-31J" contentType="text/html; charset=Windows-31J" %>
<%@ page import="java.lang.*" %>
<%
String uniqKeyInSession = (String)session.getAttribute("uniqKey");
String uniqKeyInRequest = request.getParameter("uniqKey");
String result = ("".equals(uniqKeyInSession) || "".equals(uniqKeyInRequest) || !uniqKeyInSession.equals(uniqKeyInRequest))
? "NG"
: "OK";
String name = request.getParameter("name");
String uniqKey = session.getId() + String.valueOf(System.currentTimeMillis());
session.setAttribute("uniqKey", uniqKey);
%>
<html>
<body>
<p style="font-size:110%;"><%= result %></p>
<p>uniqKey in Session: <%= uniqKeyInSession %></p>
<p>uniqKey in Request: <%= uniqKeyInRequest %></p>
<p>name in Request: <%= name %></p>
</body>
</html>