关于重复提交和struts的isTokenValid方法
2009-08-28 13:03
375 查看
对避免表单重复提交那篇文章的一点补充说明:
关于使用isTokenValid的那个方法,再详细点介绍:
一,首先介绍一下struts提供的有关令牌环的相关方法
请求有效性处理,使用令牌可以有效的防止重复提交。
protected String generateToken(HttpServletRequest request) 创建一个令牌.
protected boolean isTokenValid(HttpServletRequest request) 检查令牌是否有效
protected boolean isTokenValid(HttpServletRequest request,Boolean reset) 检查令牌是否有效,并且重置令牌(如果reset 是true)
protected void resetToken(HttpServletRequest request) 重置令牌
protected void saveToken(HttpServletRequest request) 添加令牌
二,利用struts的同步令牌机制
利用同步令牌(Token)机制来解决Web应用中重复提交的问题,Struts也给出了一个参考实现。
基本原理:
服务器端在处理到达的请求之前,会将请求中包含的令牌值与保存在当前用户会话中的令牌值进行比较,
看是否匹配。在处理完该请求后,且在答复发送给客户端之前,将会产生一个新的令牌,该令牌除传给
客户端以外,也会将用户会话中保存的旧的令牌进行替换。这样如果用户回退到刚才的提交页面并再次
提交的话,客户端传过来的令牌就和服务器端的令牌不一致,从而有效地防止了重复提交的发生。
if (isTokenValid(request, true)) {
// your code here
return mapping.findForward("success");
} else {
saveToken(request);
return mapping.findForward("submitagain");
}
Struts根据用户会话ID和当前系统时间来生成一个唯一(对于每个会话)令牌的,具体实现可以参考
TokenProcessor类中的generateToken()方法。
1. //验证事务控制令牌,<html:form >会自动根据session中标识生成一个隐含input代表令牌,防止两次提交
2. 在action中:
//<input type="hidden" name="org.apache.struts.taglib.html.TOKEN"
// value="6aa35341f25184fd996c4c918255c3ae">
if (!isTokenValid(request))
errors.add(ActionErrors.GLOBAL_ERROR,
new ActionError("error.transaction.token"));
resetToken(request); //删除session中的令牌
3. action有这样的一个方法生成令牌
protected String generateToken(HttpServletRequest request) {
HttpSession session = request.getSession();
try {
byte id[] = session.getId().getBytes();
byte now[] =
new Long(System.currentTimeMillis()).toString().getBytes();
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(id);
md.update(now);
return (toHex(md.digest()));
} catch (IllegalStateException e) {
return (null);
} catch (NoSuchAlgorithmException e) {
return (null);
}
}
相关文章推荐
- 防止重复提交表单---Struts中Token的使用方法
- 关于Struts2.0中重复提交问题的解决方法
- isTokenValid防止表单重复提交
- 防止重复提交表单---Struts中Token的使用方法
- 使用Struts的Token机制解决表单的重复提交(转ewolf的工作专栏)
- 防止刷新/后退引起的重复提交问题的Java Token代码,非Struts
- struts利用Token(令牌)防止用户重复提交
- Unable to add window -- token null is not valid; is your activity running?错误及其修改方法
- Struts -- Token机制(解决表单重复提交)
- 用Struts的Token机制解决表单重复提交
- struts分发action下用Token解决重复提交问题
- php表单加入Token防止重复提交的方法分析
- struts利用Token(令牌)防止用户重复提交(转载)
- struts利用Token防止用户重复提交
- 用Struts的Token机制解决表单重复提交
- Struts用Token解决重复提交
- struts解决表单重复提交方法!
- Struts 之旅 - 重复提交 token
- 防止刷新/后退引起的重复提交问题的Java Token代码,非Struts
- Struts中token标签防止重复提交