1,先在一个Action中,调用saveToken(HttpServletRequest request)方法。然后转向带有表单的JSP页面。
2,在JSP页面提交表单给一个Action,再这个Action中进行是否为重复提交的判断。
if (isTokenValid(request, true)) {
// 未重复提交时,正确的时候应该做的事情
return mapping.findForward("success");
} else {
// 重复提交时,需要做的事情
saveToken(request);
return mapping.findForward("error");
}
Struts Token 机制:
1, 由第一个Action调用saveToken(HttpServletRequest request),这个方法内部实现如下:
protected void saveToken(HttpServletRequest request) {
token.saveToken(request);
}
token.saveToken(request);这个方法的实现如下:
public synchronized void saveToken(HttpServletRequest request) {
HttpSession session = request.getSession();
String token = generateToken(request);
if (token != null) {
session.setAttribute(Globals.TRANSACTION_TOKEN_KEY, token);
}
}
这个方法调用generateToken方法实现如下:
public synchronized void saveToken(HttpServletRequest request) {
HttpSession session = request.getSession();
String token = generateToken(request);
if (token != null) {
session.setAttribute(Globals.TRANSACTION_TOKEN_KEY, token);
}
}
generateToken完毕后,将得到的唯一值setAttribute到session中。
session.setAttribute(Globals.TRANSACTION_TOKEN_KEY, token);
Globals.TRANSACTION_TOKEN_KEY的值是:” org.apache.struts.action.TOKEN”
然后跳转到JSP页面。
2, JSP页面的Struts自定义标签 的标签类:org.apache.struts.taglib.html. FormTag
这个类的doStartTag()方法会调用本类的renderToken()方法。
protected String renderToken() {
StringBuffer results = new StringBuffer();
HttpSession session = pageContext.getSession();
if (session != null) {
String token =(String) session.getAttribute(Globals.TRANSACTION_TOKEN_KEY);
if (token != null) {
results.append("
的隐藏标签。
然后提交到一个Action中,在Action中用isTokenValid()方法进行比较session中” org.apache.struts.action.TOKEN”的这个key所对应的值和提交来的request中的” org.apache.struts.action.TOKEN”的这个value是否一致。
如果为true,那么证明可以提交。如果为false,证明已经重复,不允许提交。
发表评论
-
String和InputStream的转换
2014-04-03 21:24 473String和InputStream的转换 1 ... -
JS暴虐查找
2014-03-18 16:40 549function JS_cruel_search(data, ... -
编码规范
2013-03-19 19:11 1014最近买了一本书《深入分析JavaWeb技术内幕》 学 ... -
[转]CAS原理
2012-10-16 16:49 1138在JDK 5之前Java语言是 ... -
关于V8 JavaScript Engine的使用方法研究(转)
2011-07-05 15:52 7954一、写在前面的话 随 ... -
javascript内置对象Array中删除元素
2011-05-30 17:43 1356在javascript中,Array对象没有提供 ... -
window.showModalDialog和window.open关闭子页面时刷新父页面 IE7,IE8
2011-05-18 11:29 3957if(true){ ... -
能动态加载js的方法
2011-04-21 16:16 776//加载新的js function _GetJsDat ... -
Shapefile格式说明及读写代码示例
2011-04-18 16:24 1855Shapefile格式说明及读写代码示例 ESR ... -
JavaScript王者归来
2011-02-26 13:39 1282内容简介回到顶部↑ 你手中的这本《javascr ... -
oracle更改用户名后 OracleDBConsole不能启动
2010-12-20 10:31 1151更改机器名后重新配置oracle数据库参数 在命令行输入 ... -
<ww:select 标签只读
2010-06-17 12:00 2010struts2中如何使s:select标签只读 在开发op ... -
URL记录
2010-03-29 20:08 718http://blog.qq.com/qzone/622 ... -
Java 泛型的理解与等价实现
2009-12-17 10:54 677Java 泛型的理解与等价 ... -
软件行业规范化势在必行
2009-05-24 14:20 1096http://blog.csai.cn/user1/21567 ... -
MD5加密
2009-05-17 18:22 1091import java.io.IOException;i ... -
CVS权限设置
2009-05-08 11:22 1381不同用户设置不同的访问权限方法 ... -
转载http://blog.csdn.net/xidor/archive/2008/03/20/22
2009-04-21 20:50 1129// JavaScript Document /**//** ... -
java学习网站
2009-03-18 10:08 1199http://www.open-open.com/ http ... -
从“表内”,“表外”说起,商业银行业务学习(一)
2009-02-28 11:43 1373今天胡里胡涂又做了几张报表,忽然想起一年前也是在做类似的报表, ...
相关推荐
struts token dozer java,有需要的请猛击下载
struts token机制解决表单重复提交
struts2的token实现.
JavaEE Struts2利用tokenSession防止重复提交
struts2token回退刷新
struts2中token限制表单多次提交
Struts1.x令牌(Token)的使用.rar
struts2_token控制刷新重复提交
用struts使用Token机制来实现防重复提交
提供源代码和思想,整体架构都在,只需加入你自己的业务逻辑即可。
简单的struts2令牌token实例 方便应用 不懂token也可以参考学习 主要用于解决重复提交的问题
例子程序...........................
Struts1.x实现防止提交的Token使用示例。工程环境:MyEclipse
用struts的token解决重复提交问题
NULL 博文链接:https://finally-m.iteye.com/blog/360648
详细介绍struts+token机制解决表单重复提交问题。附带相关代码
在struts 中可以通过token 来解决重复提交的问题。
struts2防止表单重复提交,利用struts的拦截器tokenSession,轻轻松松解决表单重复提交的问题。 附件为源代码,后台延迟了3秒,可直接在web服务器下部署运行,输入用户名和密码后,多点几次提交按钮,然后看控制台...
首先需要在提交的jsp页面(要使用token机制,必须使用struts2提供的标签库)加上 <s></s> 这段代码,然后在struts.xml里面需要进行如下配置: <action name=token class=com.xiaoluo.struts2.TokenAction> ...
Struts 之旅 - 重复提交 token