`

Struts中Token的使用方法,不使用htlm:form (转)

 
阅读更多
                        Token的使用方法

使用Token可以防止当用户刷新页面和点击后退按钮时造成的页面表单重复提交的问题:
使用方法如下:



首先要通过一个页面生成一个Token令牌,生成一个随机数
可以创建一个页面main.jsp
然后在该页面上放置一个按钮或者超连接 ,该超连接指向一个action类
在这个action类中使用
     this.saveToken(request);    //生成Token    
     Globals s;
     return mapping.findForward("success"); //跳转到增加页面



在--增加页面--中导入如下两个jar包
<%@ page import="org.apache.struts.taglib.html.Constants" %>
<%@ page import="org.apache.struts.Globals" %>
然后在页面上添加一个隐藏域
<input type="hidden" name="<%=Constants.TOKEN_KEY%>"    value="<%=session.getAttribute(Globals.TRANSACTION_TOKEN_KEY)%>"/>
此处的name value中的值都是固定的,不允许改变



在---AddUserAction-----中,使用isTokenValid(request)验证Token,如果产生的Token令牌随机数不同,则
跳转到错误页面,如果相同则把session中的Token删除,然后进行业务处理
     if (!this.isTokenValid(request)) {
         return mapping.findForward("error");
     }
     this.resetToken(request);//则该页面只能提交一次(无论刷新或手动提交)
    或 this.saveToken(request);  //则该页面可以(多次手动提交,刷新不会提交)
      //之后跟业务代码

注意:
Hidden的名称必须为Constants.TOKEN_KEY
Hidden的值必须为session.getAttribute(Globals.TRANSACTION_TOKEN_KEY)


思路如下:
1.在前置action中, 在session中保存一个变量A
2.在页面 的request中,也保存一个B 赋值为A的值
3.第一次提交时 A equels B 则必相等,此时  重置A的值 并跳转至上传页面
4. 同2 ,如果手动提交,无影响可以继续上传
5.如果用户手动刷新页面,则 此时不会走页面,直接后台的ACTION (request是不变的)
  此时A equels B ==false  跳转至error页面即可

分享到:
评论

相关推荐

    struts2 标签库 帮助文档

    &lt;%@ taglib prefix="s" uri="/struts-tags" %&gt; 就能使用struts2.0的标签库 下面就介绍每个标签的具体应用实例说明:按字母排列 A: 1. 2. &lt;s:a href=""&gt;&lt;/s:a&gt;-----超链接,类似于html里的&lt;a&gt;&lt;/a&gt; 3. &lt;s:...

    深入浅出Struts2(附源码)

    5.1 Struts标签的使用方法 59 5.2 表单标签的共同属性 60 5.3 form标签 62 5.4 textfield、password、hidden标签 63 5.5 submit标签 65 5.6 reset标签 65 5.7 label标签 66 5.8 head标签 66 5.9 textarea...

    深入浅出Struts 2 .pdf(原书扫描版) part 1

    5.1 Struts标签的使用方法 59 5.2 表单标签的共同属性 60 5.3 form标签 62 5.4 textfield、password、hidden标签 63 5.5 submit标签 65 5.6 reset标签 65 5.7 label标签 66 5.8 head标签 66 5.9 textarea标签 66 ...

    java web 视频、电子书、源码(李兴华老师出版)

    11.2、在Tomcat中使用数据库连接池 11.3、查找数据源 11.4、本章摘要 第12章 JSP标签编程 12.1、标签编程简介 12.2、定义一个简单的标签 —— 空标签 12.3、定义有属性的标签 12.4、TagSupport类 12.5...

    低清版 大型门户网站是这样炼成的.pdf

    5.1.10 使用hibernate的isinitialized()与initialize()方法 277 5.1.11 持久化对象间的级联操作 277 5.2 hibernate的检索策略 291 5.2.1 立即检索 291 5.2.2 延迟检索 296 5.2.3 迫切左外连接检索 300 5.3 hql...

    MLDN+李兴华+Java+Web开发实战经典.part3.rar )

    11.2、在Tomcat中使用数据库连接池 11.3、查找数据源 11.4、本章摘要 第12章 JSP标签编程 12.1、标签编程简介 12.2、定义一个简单的标签 —— 空标签 12.3、定义有属性的标签 12.4、TagSupport类 12.5...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 上

    11.2、在Tomcat中使用数据库连接池 11.3、查找数据源 11.4、本章摘要 第12章 JSP标签编程 12.1、标签编程简介 12.2、定义一个简单的标签 —— 空标签 12.3、定义有属性的标签 12.4、TagSupport类 12.5、定义...

    李兴华 java_web开发实战经典 源码 完整版收集共享

    11.2、在Tomcat中使用数据库连接池 11.3、查找数据源 11.4、本章摘要 第12章 JSP标签编程 12.1、标签编程简介 12.2、定义一个简单的标签 —— 空标签 12.3、定义有属性的标签 12.4、TagSupport类 12.5、定义...

    李兴华 Java Web 开发实战经典_带源码_高清pdf 带书签 下

    11.2、在Tomcat中使用数据库连接池 11.3、查找数据源 11.4、本章摘要 第12章 JSP标签编程 12.1、标签编程简介 12.2、定义一个简单的标签 —— 空标签 12.3、定义有属性的标签 12.4、TagSupport类 12.5、定义...

    李兴华Java Web开发实战经典.pdf (高清版) Part1

    11.2、在Tomcat中使用数据库连接池 11.3、查找数据源 11.4、本章摘要 第12章 JSP标签编程 12.1、标签编程简介 12.2、定义一个简单的标签 —— 空标签 12.3、定义有属性的标签 12.4、TagSupport类 12.5...

    李兴华 Java Web 开发实战经典 高清扫描版Part3

    11.2、在Tomcat中使用数据库连接池 11.3、查找数据源 11.4、本章摘要 第12章 JSP标签编程 12.1、标签编程简介 12.2、定义一个简单的标签 —— 空标签 12.3、定义有属性的标签 12.4、TagSupport类 12.5、定义...

    李兴华Java Web开发实战经典(高清版) Part2

    11.2、在Tomcat中使用数据库连接池 11.3、查找数据源 11.4、本章摘要 第12章 JSP标签编程 12.1、标签编程简介 12.2、定义一个简单的标签 —— 空标签 12.3、定义有属性的标签 12.4、TagSupport类 12.5...

    jsp 重复提交问题

    在 Struts 的 action 中使用 redirect 属性,修改 Struts-config.xml 文件,添加 redirect 属性,设置为 true。 &lt;forward name="list" path="/listnews.jsp" redirect="true"&gt;&lt;/forward&gt; ...

    spring security 参考手册中文版

    作为用户在Spring MVC测试中使用注释运行 108 12.2.4测试HTTP基本认证 109 12.3 SecurityMockMvcRequestBuilders 109 12.3.1测试基于表单的认证 109 12.3.2测试注销 110 12.4 SecurityMockMvcResultMatchers 110 ...

Global site tag (gtag.js) - Google Analytics