流程 如下: servelet(生成令牌*随机数*保存到session) ===> 编辑页面(代有HTML的普通FORM表单,表单里有一个HIDDEN )===提交数据 ===>servelet(HIDDEN值跟SESSION里的值比较* 重新生成令牌)
servelet:
/**
* 生成一个10位的随机数,用字符串表示
* @return 返回生成的1000位的随机数
*/
public String createAutoNum() {
char[] num = new char[10];// 生成一个1000位的char数组
Random ran = new Random();// 随机数类
int temp;// 存放当前随机数
char cur;// 存放当前字符
for (int i = 0; i < num.length; i++) {
temp = ran.nextInt(10);// 生成一个0-9的随机数
cur = (char) ('0' + temp);// 转化成char型的数字
num[i] = cur;// 放到数组的当前位
}
return new String(num);// 返回这个随机数(用字符串形式)
}
HttpSession session = httpServletRequest.getSession();
session.setAttribute("qdtoken", createAutoNum());//设置命令牌
//编辑页面
String qdtoken = (String)request.getSession().getAttribute("qdtoken");
<input type="hidden" name="qdtoken" value="<%=qdtoken %>" />
servelet :
HttpSession session = request.getSession();
if(qdtoken.equals(session.getAttribute("qdtoken"))){//检查是否重复提交
session.setAttribute("qdtoken", createAutoNum());
}else{
session.setAttribute("qdtoken", createAutoNum());//提交令牌 防止重复提交
}