关于使用isTokenValid
来源:互联网 发布:淘宝指数查询工具 编辑:程序博客网 时间:2024/05/17 22:04
一,首先介绍一下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);
}
}
- 关于使用isTokenValid
- 关于使用isTokenValid
- 关于重复提交和struts的isTokenValid方法
- isTokenValid(request)
- isTokenValid用法 java
- How to use isTokenValid
- isTokenValid的疑问
- struts isTokenValid 防止重复提交
- isTokenValid防止表单重复提交
- 关于使用AsyncTaskLoader的使用
- 关于游标的使用
- 关于ViewState的使用
- 关于TreeView 的使用
- 关于isinstance使用(节选)
- 关于SQLDMO的使用
- 关于标签使用
- 关于过滤器的使用
- 关于DTD的使用
- hdu 1012 水
- 程序交互的几种方式
- linux图形界面基本知识(X、X11、Xfree86、Xorg、GNOME、KDE之间的关系)
- left join 和 left outer join 的区别
- 网站防止盗链的方法
- 关于使用isTokenValid
- java获取字符串unicode编码
- String的方法
- Javascript URL 编码区别及转义字符处理
- StringBuffer与String的区别
- android 读短信
- Tomcat 6.0配置
- c++ 编译期与运行期 总结
- InfoPath 还是 Word:选择最适合的工作工具