saveToken介
来源:互联网 发布:中科院数学院士知乎 编辑:程序博客网 时间:2024/04/30 11:28
1》防止多次点击“提交”,让多次“提交”变成只一次“提交”
saveToken(rquest)
的目的是页面上的按钮只相应一次,比如说,在页面上有个新增按钮,如果你连续点击数次,后台程序可能会响应n次,加了这句话,在页面
上自动生成一个hidden变量
2》防止页面重复提交
利用同步令牌(Token)机制来解决Web应用中重复提交的问题,Struts也给出了一个参考实现。
基本原理:
服务器端在处理到达的请求之前,会将请求中包含的令牌值与保存在当前用户会话中的令牌值进行比较,看是否匹配。在处理完该请求后
,且在答复发送给客户端之前,将会产生一个新的令牌,该令牌除传给客户端以外,也会将用户会话中保存的旧的令牌进行替换。这样如果用
户回退到刚才的提交页面并再次提交的话,客户端传过来的令牌就和服务器端的令牌不一致,从而有效地防止了重复提交的发生。
if (isTokenValid(request, true)) {
// 表单不是重复提交
//这里是保存数据的代码
} else {
//表单重复提交
saveToken(request);
//其它的处理代码
}
网上例子为证:
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
UserForm userForm = (UserForm)form;
if(!isTokenValid(request)){
saveToken(request);
userForm.setMessage("重复提交");
return mapping.findForward("failure");
}
else{
resetToken(request);
}
request.setAttribute("user", userForm);
return mapping.findForward("success");
}
}
模板经典例子:
public ActionForward save(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws BaseException {
if (!isTokenValid(request)) { // 如果指令无效,则属于重复提交
return (new ActionForward(mapping.getInput()));
} else {
resetToken(request);
}
BaseDao dao = DAOFactory.getDao(getEntityDAOClassName());
dao.begingTransaction();
Class cls = dao.getEntityClass();
try {
BaseVO vo = (BaseVO) cls.newInstance();
DataTrans.copyProperties(vo, form);
this.saveEx(mapping, form, request, response, vo);
dao.save(vo);
dao.commitTransaction();
} catch (Exception e) {
dao.rollback();
throw new BaseException("保存数据出现异常");
} finally {
dao.sessionClose();
}
return mapping.findForward("saveSuccess");
}
0 0
- saveToken介
- Action中的saveToken方法
- struts中的saveToken的作用
- Struts中的 saveToken的方法
- struts令牌机制防止重复提交 savetoken(request) resetToken(request)
- oracle工具介紹
- vi 使用簡介
- Introduction-本书简介
- 一段英文自介
- 正則表達式的簡介
- 手机 : 音乐格式详介
- 马 云 简 介
- SAP之介紹
- wpf 简 介 ....
- JAVA加密簡介
- SQLServer全局变量详介
- OSCache使用介紹
- 自分紹介
- ZOJ-1001
- MySQL 加锁处理分析(何登成)
- 2.6.19内核
- git 基础
- App设计师常用的10大网页和工具大盘点
- saveToken介
- Eclipse快捷键大全
- Eigen库 求解特征值特征向量
- 如何调试oracle存储过程
- APUE 阅读笔记——信号(Chapter 10)
- zigbee基本概念及组网特性
- get,put,post,delete含义与区别
- IIS下运行程序,调试源代码
- [Learn]bool party