防止表单重复提交主要用的到标签是<s: token />,拦截器 <interceptor-ref name="token" />,还有一个默认的返回值<result name="invalid.token">/input.jsp</result>
在页面加载时,<s: token />产生一个GUID(Globally Unique Identifier,全局唯一标识符)值的隐藏输入框如:
- <input type="hidden" name="struts.token.name" value="struts.token"/>
-
<input type="hidden" name="struts.token" value="BXPNNDG6BB11ZXHPI4E106CZ5K7VNMHR"/>
同时,将GUID放到会话(session)中;在执行action之前,“token”拦截器将会话token与请求token比较,如果两者相同,则将会话中的token删除并往下执行,否则向actionErrors加入错误信息。如此一来,如果用户通过某种手段提交了两次相同的请求,两个token就会不同。
以下为action代码
- import com.opensymphony.xwork2.ActionSupport;
-
-
public class TestAction extends ActionSupport {
-
private static final long serialVersionUID = 6820659617470261780L;
-
-
private String message;
-
-
public String getMessage() {
-
return message;
- }
-
-
public void setMessage(String message) {
-
this.message = message;
- }
-
-
@Override
-
public String execute() {
-
System.out.println("Executing action, your message is " + message);
-
return SUCCESS;
- }
- }
再看看JSP的写法
- <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
-
<%@ taglib prefix="s" uri="/struts-tags" %>
-
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
<html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <title>struts2 test token</title>
- <s:head />
- </head>
- <body>
- <s:actionerror />
-
<s:form action="testAction" >
-
<s:textfield name="message" label="Message" />
- <s:token /> <%-- 注意这里--%>
- <s:submit />
- </s:form>
- </body>
- </html>
下面是struts2的配置文件
- <?xml version="1.0" encoding="UTF-8"?>
-
- <!DOCTYPE struts PUBLIC
-
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-
"http://struts.apache.org/dtds/struts-2.0.dtd">
-
- <struts>
-
<package name="test" extends="struts-default" namespace="/testToken">
-
<action name="test" class="com.fhx.TestAction">
-
<result name="invalid.token">/input.jsp</result>
- <result>/input.jsp</result>
-
-
<interceptor-ref name="defaultStack" />
-
<interceptor-ref name="token" />
-
- </action>
-
</package>
- </struts>
以上XML片段值注意的是加入了“token”拦截器和“invalid.token”结果,因为“token”拦截器在会话token与请求token不一致时,将会直接返回“invalid.token”结果。
分享到:
相关推荐
struts2防止表单重复提交--重定向
这里是Struts2 中放置表单重复提交的例子。
【原创】Struts2防止表单重复提交.doc
struts2防止表单重复提交,利用struts的拦截器tokenSession,轻轻松松解决表单重复提交的问题。 附件为源代码,后台延迟了3秒,可直接在web服务器下部署运行,输入用户名和密码后,多点几次提交按钮,然后看控制台...
这个示例简单易懂,就是利用token过滤器
防止表单重复提交 token eclipse项目
struts2防止重复登录,分享给大家学习一下。
struts数据回显、模型驱动、防止表单重复提交
详解struts2的token机制和cookie来防止表单重复提交 今天在做一个投票系统时要实现防止表单重复提交! 当时就想到了用struts2提供的token机制 struts2的token机制防止表单重复提交: 首先需要在提交的jsp页面(要...
本文档主要记录了struts2的属性驱动和模型驱动的区别,以及防止表单重复提交,另外增加了验证信息的正确位置的显示,希望对你有所帮助!
SSH笔记-数据验证、上传下载、避免表单重复提交、自定义拦截器
Struts2知识点总结,包括文件上传,文件下载,防止表单重复提交,Struts2标签,Struts2拦截器
struts2知识点:处理流程,基本配置,与servlet的API解耦,结果类型,通配符和动态方法的调用,类型转换,文件上传,拦截器,表单验证,国际化,OGNL表达式,UI标签,模型驱动,防止表单重复提交,项目练习知识点:...
简单使用struts2,Hibernate 3实现注册模块 另外使用token方式防止表单重复提交 使用hbm2ddl.auto,透过pojo产生数据库表
介绍Struts 2及Struts 2开发环境的搭建 第一个Struts 2应用开发 解决Struts 2配置文件无提示问题 Action名称的搜索顺序 ...使用标签防止表单重复提交 Struts 2+Spring 2.5+Hibernate 3.3整合开发
5. TokenInterceptor防止表单重复提交。 34 6.使用拦截器实现权限验证 35 7.拦截器中的注解 37 8.使用PreResultListener实现回调 39 六、使用标签 40 1.基础表单标签 40 2.单选按钮和复选框: 41 3.三种方式实现下拉...
本课程讲解Struts2的执行流程和基本原理分析?本课程全面讲解Struts2的数据封装方式和值栈数据的存储和获取?本课程讲解Struts2防止表单重复提交和注解方式的开发
这里包含了struts2标签的介绍,介绍了Struts2中OGNLvalueStack和stackContext,radio List的预选问题,文件的上传与下载,防止表单重复提交optiontransferselect字符串拼接,struts2_Path_路径问题