设为首页 加入收藏

TOP

Struts 2.x避免表单的重复提交——Token
2014-11-24 08:12:39 来源: 作者: 【 】 浏览:0
Tags:Struts 2.x 避免 表单 重复 提交 Token

(1) 避免表单的重复提交的方式:


采用HttpServletRequest.sendRedirect()方法将客户端重定向到成功页面。


在客户端通过java script实现;


在服务端编写代码实现。


(2) 在服务器端避免表单重复提交,通常是采用同步令牌的方式来实现,其基本的原理如下:


(1)用户访问包含表单的页面,服务器端在这次会话中,创建一个Session对象,并产生一个令牌值,将这个令牌值作为隐藏输入域(元素的type属性为hidden)的值, 随表单一起发送到客户端,同时将令牌值保存到Session中。


(2)用户提交页面,服务器端首先判断请求参数中的令牌值和Session中保存的令牌值是否相等,如果相等,则淸除Session中的令牌值,然后执行数据处理操作。如果不相等,则提示用户己经提交过了表单,同时产生一个新的令牌值,保存到Session中。当用户重新访问提交数据页面时,将新产生的令牌值作为隐藏输入域的值。


(3) Struts 2的实现方式:


(1)需要在表单中使用标签,并置定一个令牌的名称。例如:


(2)为Action类配置应用TokenInterceptor或者TokenSessionStoreInterceptor拦截器,这两个拦截器已经在struts-default.xml中定义,但没有包含在default拦截器栈中.


范例:避免重复提交表单


TokenAction.java:


import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
public class TokenAction extends ActionSupport implements ModelDriven {
private static final long serialVersionUID = 7502909137522615270L;
private User user=new User();
@Override
public User getModel() {
return user;
}
@Override
public String execute() throws Exception {
if ("qiang".equalsIgnoreCase(user.getName())&&"1234".equals(user.getPassword())) {
return SUCCESS;
} else {
return ERROR;
}
}
}


User.java:


public class User {
private String name;
private String password;
//省略getter与setter方法
}


token_login.jsp:














struts.xml




/s15/success.jsp
/s15/error.jsp




】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇bash下获取随机数的方法 下一篇Spring MVC整合Freemarker基于注..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·“我用Java 8”已成 (2025-12-26 11:19:54)
·下载 IntelliJ IDEA (2025-12-26 11:19:52)
·Java是什么?(通俗 (2025-12-26 11:19:49)
·雾里看花:真正意义 (2025-12-26 10:54:36)
·C++——模板(超详细 (2025-12-26 10:54:34)