Struts2_使用token拦截器控制重复提交(很少用)

控制重复提交的方式:1、表单提交后页面重定向;2、Struts2.x token拦截器

大致流程:

例子:

index.jsp

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <%
 4 String path = request.getContextPath();
 5 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 6 %>
 7 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 8 <html>
 9 <head>
10 <base href="<%=basePath %>"/>
11 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
12 <title>Hello Struts2</title>
13 </head>
14 <body>
15     <a href="input.action">输入用户信息</a>
16 </body>
17 </html>

input.jsp

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <%
 4 String path = request.getContextPath();
 5 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 6 %>
 7 <%@ taglib uri="/struts-tags" prefix="s" %>
 8 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 9 <html>
10 <head>
11 <base href="<%=basePath %>"/>
12 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
13 <title>Hello Struts2</title>
14 </head>
15 <body>
16     <form action="user.action" method="post">
17         name:<input type="text" name="name"/>
18         age:<input type="text" name="age"/>
19         <input type="submit" value="提 交"/>
20         <s:token></s:token>
21     </form>
22 </body>
23 </html>

addOK.jsp

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <%
 4 String path = request.getContextPath();
 5 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 6 %>
 7 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 8 <html>
 9 <head>
10 <base href="<%=basePath %>"/>
11 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
12 <title>Hello Struts2</title>
13 </head>
14 <body>
15     addOK.
16 </body>
17 </html>

error.jsp

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <%
 4 String path = request.getContextPath();
 5 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 6 %>
 7 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 8 <html>
 9 <head>
10 <base href="<%=basePath %>"/>
11 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
12 <title>Hello Struts2</title>
13 </head>
14 <body>
15     严禁做重复的事!
16 </body>
17 </html>

struts.xml

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE struts PUBLIC
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
 4     "http://struts.apache.org/dtds/struts-2.3.dtd">
 5
 6 <struts>
 7     <constant name="struts.enable.DynamicMethodInvocation" value="true" />
 8     <constant name="struts.configuration.xml.reload" value="true"/>
 9
10     <package name="test" namespace="/" extends="struts-default">
11
12         <action name="input" class="com.bjsxt.action.InputAction">
13             <result>/input.jsp</result>
14         </action>
15
16         <action name="user" class="com.bjsxt.action.UserAction">
17             <result>/addOK.jsp</result>
18             <interceptor-ref name="defaultStack"></interceptor-ref>
19             <interceptor-ref name="token"></interceptor-ref>
20             <result name="invalid.token">/error.jsp</result>
21         </action>
22
23     </package>
24
25 </struts>

InputAction

 1 package com.bjsxt.action;
 2
 3 import com.opensymphony.xwork2.ActionSupport;
 4
 5 public class InputAction extends ActionSupport {
 6
 7     private static final long serialVersionUID = -8003780600877800393L;
 8
 9     public String execute(){
10         return SUCCESS;
11     }
12
13 }

UserAction

 1 package com.bjsxt.action;
 2
 3 import com.opensymphony.xwork2.ActionSupport;
 4
 5 public class UserAction extends ActionSupport {
 6
 7     private static final long serialVersionUID = -8003780600877800393L;
 8
 9     private String name;
10
11     private int age;
12
13     public String execute(){
14         System.out.println("a user added!");
15         return SUCCESS;
16     }
17
18     public String getName() {
19         return name;
20     }
21
22     public void setName(String name) {
23         this.name = name;
24     }
25
26     public int getAge() {
27         return age;
28     }
29
30     public void setAge(int age) {
31         this.age = age;
32     }
33
34 }

链接: http://pan.baidu.com/s/1mi1BnoW 密码: rpee

时间: 2024-10-31 11:13:39

Struts2_使用token拦截器控制重复提交(很少用)的相关文章

Struts2利用token和tokenSession拦截器防止重复提交

有时候网络响应慢,用户可能会再次点击提交按钮,或者在保存页面refresh 也会造成重复提交,这样会造成数据库中有多条相同的数据: 我们当然可以利用js来控制,但是如果浏览器禁用了JS,那就不能控制了. Struts2中设计了token和tokenSession拦截器来拦截重复提交: jsp页面: 1 <@ taglib prefix="s" uri="/struts-tags" /> 2 3 <s:form action="testTo

struts2 自带的 token防止表单重复提交拦截器

在struts2中,我们可以利用struts2自带的token拦截器轻松实现防止表单重复提交功能! 1. 在相应的action配置中增加:  <interceptor-ref name="token"></interceptor-ref> <result name="invalid.token">/error.jsp</result> 2. 增加error.jsp文件,代码如下:  <h1>禁止重复提交&l

Struts2系列:(13)防表单重复提交(token + 拦截器)

1.原理 服务器端和客户端通过token(令牌)来进行验证: (1)Browser向Tomcat服务器请求填写表单 (2)Tomcat服务器将带有token的表单返回给Browser (3)浏览器端在提交时,将form和token一起发送到服务器 (4)Tomcat服务器对Browser进行验证 2.基本步骤 基本步骤如下: 第一步:写好Action,在struts.xml为接受该表单提交请求的action配置token拦截器[服务器] <action name="student_*&qu

Jfinal token拦截器另类实现,防止表单重复提交

大部分的操作和jfinal原来的是相似的 在跳转到view之前,生成token createToken("jockillerToken", 30*60); 2.在页面中加入隐藏域,内容如下 <input type="hidden" name="jockillerToken" value="${jockillerToken}"/> 3.定义token拦截器,这就是唯一的一点不同的地方 /**  * 防止表单重复提交

php通过token验证表单重复提交

PHP防止重复提交表单 2016-11-08 轻松学PHP 我们提交表单的时候,不能忽视的一个限制是防止用户重复提交表单,因为有可能用户连续点击了提交按钮或者是攻击者恶意提交数据,那么我们在提交数据后的处理如修改或添加数据到数据库时就会惹上麻烦. 那么如何规避这中重复提交表单的现象出现呢?我们可以从很多方面入手,首先从前端做限制.前端JavaScript在按钮被点击一次后禁用,即disabled,这个方法简单的防止了多次点击提交按钮,但是缺点是如果用户禁用了javascript脚本则失效.第二,

PHP简单利用token防止表单重复提交

<?php /* * PHP简单利用token防止表单重复提交 * 此处理方法纯粹是为了给初学者参考 */ session_start(); function set_token() { $_SESSION['token'] = md5(microtime(true)); } function valid_token() { $return = $_REQUEST['token'] === $_SESSION['token'] ? true : false; set_token(); retur

PHP生成token防止表单重复提交

1.提交按钮置disabled 当用户提交后,立即把按钮置为不可用状态.这种用js来实现. 提交前代码如下: $("#submit").attr('disabled','true'); $("#submit").val("正在提交,请稍等"); 执行后,把按钮置为原来状态 代码如下: $('#submit ').removeAttr('disabled'); $("#submit ").val("确定提交"

利用struts2&lt;s:token&gt;标签防止用户重复提交

当用户填写完表单后,在提交过一次后,若用户做如下操作比如再次点击提交.刷新页面.提交页面呈现后点击后退按钮,都会导致表单重复提交.如果信息需要存储到后台数据库中,重复提交就会再次向数据库中插入用户信息,显然这样是不对的.解决方式有两种 (一)Session Token机制 当用户首次访问包含表单的页面时,此时服务器会做三件事 1)创建一个session对象, 2)通过解析<s:token>标签(编程时此标签在要加入表单页面中)会产生一个随机数(可以将其称为盾牌,注意这个不是session ID

token防止表单重复提交

出现表单重复提交的三种情况: 一.服务器响应缓慢,用户多次点击提交按钮. 二.提交成功后刷新页面. 三.提交成功后返回表单页面再次点击提交. package com.jalja.token; import java.io.IOException; import java.io.PrintWriter; import java.util.UUID; import javax.servlet.ServletException; import javax.servlet.http.HttpServle