详解struts2的token机制和cookie来防止表单重复提交
详解struts2的token机制和cookie来防止表单重复提交
今天在做一个投票系统时要实现防止表单重复提交!
当时就想到了用struts2提供的token机制
struts2的token机制防止表单重复提交:
首先需要在提交的jsp页面(要使用token机制,必须使用struts2提供的标签库)加上
<s:token></s:token>
这段代码,然后在struts.xml里面需要进行如下配置:
<action name="token" class="com.xiaoluo.struts2.TokenAction"> <result name="success">/tokenSuccess.jsp</result> <result name="invalid.token">/tokenFail.jsp</result> //name必须是invalid.token <interceptor-ref name="token"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </action>
总的来说,struts2提供的token机制来防止表单重复提交还是挺方便的,但是有时却不一定很好的达到我们所需要的目的!
接下来是用cookie来防止表单重复提交,就拿今天做的投票系统的例子来说,通过将 每个投票选项的id以及"hasVote" + id的组合放到cookie里面,然后根据所需设置cookie存活时间,然后放到response里面,然后在处理投票的action里首先判断 cookie中的name是否是已经投过票的名称,如果是就重定向到重复提交页面!
Cookie[] cookies = request.getCookies(); for(Cookie cookie : cookies) { if(String.valueOf(vote.getId()).equals(cookie.getValue())) { response.sendRedirect("repeatSubmit.jsp"); } else { Cookie cookie2 = new Cookie("hasVote" + vote.getId(), String.valueOf(vote.getId())); response.addCookie(cookie2); } }
我觉得cookie的这种方法更加实用一些,在实际中根据自己情况自行选择方式吧!
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
相关推荐
-
Struts2中接收表单数据的三种驱动方式
1.属性驱动 前台表单中字段的name和后台action中的属性字段的名称必须保持一致: 2.域驱动 前台表单中字段的name应该为:objectName.attribute的形式; 后台action中以object为单位进行数据的接收,前台页面的取值方式为: 3.模型驱动 前台表单中字段的name应该为:attribute的形式; 后台action实行ModelDriven接口,并重写getModel方法:前台页面的取值方式为: ${attribute}; 以上所述是小编给大家介绍的Strut
-
通过Ajax两种方式讲解Struts2接收数组表单的方法
使用struts2表单传值,可以传一个或者是作为一个对象的各个属性传,都非常灵活便捷.但是如果我们需要传一个数组并希望struts正确接收,该怎么处理呢? 下面我将通过普通表单和ajax两种方式讲解.首先我们有如下一个实体,一个action和一个jsp. Student.java public class Student { private String name; private String num; } StudentAction.java public class StudentActi
-
struts2中一个表单中提交多个请求的例子(多个提交按钮)
使用这种方式也需要通过请求参来来指定要执行的动作.请求参数名的格式为 action!method.action 注:由于Struts2只需要参数名,因此,参数值是什么都可以. 下面我就给出一个实例程序来演示如何处理有多个submit的form: 主页面more_submit.jsp 复制代码 代码如下: <%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
-
Struts2中Action三种接收参数形式与简单的表单验证功能
有了前几篇的基础,相信大家对于Struts2已经有了一个很不错的认识,本篇我将为大家介绍一些关于Action接收参数的三种形式,以及简单的表单验证实现,下面进入正题,首先我们一起先来了解一下最基本的Action接收参数的形式,直接在我们的Action类中添加成员变量,这样就可以完成Action接收参数的操作,具体内容详见代码展示: 这里我们以登录验证为例,进行代码展示,首先是我们的Action类: /*** * 最基本的接收参数形式 * @author jho * http://localhos
-
J2EE中的struts2表单细节处理
/struts-tags中自带了很多标签 比如一个简单的登录表单,其中自带了很多的样式,实际上如果你不需要用到struts的实际功能的时候不建议使用 <s:form action="user_save"> <s:token></s:token> <s:textfield name="username" label="用户名"></s:textfield> <s:textfield
-
详解struts2的token机制和cookie来防止表单重复提交
详解struts2的token机制和cookie来防止表单重复提交 今天在做一个投票系统时要实现防止表单重复提交! 当时就想到了用struts2提供的token机制 struts2的token机制防止表单重复提交: 首先需要在提交的jsp页面(要使用token机制,必须使用struts2提供的标签库)加上 <s:token></s:token> 这段代码,然后在struts.xml里面需要进行如下配置: <action name="token" class
-
springMVC中基于token防止表单重复提交方法
本文介绍了springMVC中基于token防止表单重复提交方法,分享给大家,具体如下: 实现思路: 在springmvc配置文件中加入拦截器的配置,拦截两类请求,一类是到页面的,一类是提交表单的.当转到页面的请求到来时,生成token的名字和token值,一份放到Redis缓存中,一份放传给页面表单的隐藏域.(注:这里之所以使用redis缓存,是因为tomcat服务器是集群部署的,要保证token的存储介质是全局线程安全的,而redis是单线程的) 当表单请求提交时,拦截器得到参数中的toke
-
PHP使用token防止表单重复提交的方法
本文实例讲述了PHP使用token防止表单重复提交的方法.分享给大家供大家参考,具体如下: <?php /* * PHP使用token防止表单重复提交 * 此处理方法纯粹是为了给初学者参考 */ session_start(); function set_token() { $_SESSION['token'] = md5(microtime(true)); } function valid_token() { $return = $_REQUEST['token'] === $_SESSION
-
PHP实现防止表单重复提交功能【基于token验证】
本文实例讲述了PHP实现防止表单重复提交功能.分享给大家供大家参考,具体如下: 防止表单重复提交的方法有很多种,那么今天就给大家介绍一种php如何有效的防止表单重复提交. 代码非常简单 我相信大家很聪明给大家分享一个小的demo,大家可以借鉴一下: 具体代码: <?php /* * 2016年9月29日08:09:13 */ session_start(); header("Content-Type: text/html;charset=utf-8"); function set
-
基于Struts2实现防止表单重复提交
首先要配置拦截器,拦截器用于控制重复提交内容!其实原理很简单,就是在表单内生成一个序列,判断是否为新的序列,如果是之前的序列,则证明是一个重复提交内容! 拦截器配置如下: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
-
详解Struts2拦截器机制
Struts2的核心在于它复杂的拦截器,几乎70%的工作都是由拦截器完成的.比如我们之前用于将上传的文件对应于action实例中的三个属性的fileUpload拦截器,还有用于将表单页面的http请求参数设置成action中对应的属性的param拦截器等.总之,在整个Struts框架中拦截器的作用是相当大的,本篇将从以下几点详细介绍下有关Struts拦截器的内容: 拦截器在Struts中的作用 自定义拦截器实现类 配置拦截器(包含配置默认拦截器) 引用拦截器 配置拦截指定方法的拦截器 拦截器的拦
-
springMVC如何防止表单重复提交详解
目录 前言 防止表单重复提交 单机 实现的思路步骤 代码实现 分布式 实现的思路步骤 代码实现 总结 前言 在系统中,有些接口如果重复提交,可能会造成脏数据或者其他的严重的问题,所以我们一般会对与数据库有交互的接口进行重复处理 首先可以在前端做一层控制.当前端触发操作时,或弹出确认界面,或 disable 禁用按钮等等,但是这并不能彻底解决问题.假设我们不是从客户端提交,而是被其他的系统调用,还会遇到这种问题 为了彻底解决问题,还需要在后端对接口做防重处理 一般会引起表单重复提交的场景 在网
-
详解浏览器的缓存机制
目录 前言 1 浏览器缓存 1.1 浏览器缓存 1.2 浏览器缓存的意义 2 缓存类型 2.1 第一次请求数据 2.2 强制缓存 2.3 协商缓存 2.4 强制缓存和协商缓存的关系 3 缓存相关header 3.1 强制缓存 3.2 协商缓存 3.3 缓存请求 4 实例分析 4.1 官网首页: 4.2 社区 4.3 云市场 4.4 个人中心 4.5 论坛 4.6 App 总结 前言 浏览器缓存是前端性能优化的重要一环,对于前端效率提升的重要性,不言而喻. 之前对于浏览器缓存也是一知半解,这次借着
-
详解Spring的核心机制依赖注入
详解Spring的核心机制依赖注入 对于一般的Java项目,他们都或多或少有一种依赖型的关系,也就是由一些互相协作的对象构成的.Spring把这种互相协作的关系称为依赖关系.如A组件调用B组件的方法,可称A组件依赖于B组件,依赖注入让Spring的Bean以配置文件组织在一起,而不是以硬编码的方式耦合在一起 一.理解依赖注入 依赖注入(Dependency Injection) = 控制反转(Inversion ofControl,IoC):当某个Java实例(调用者)需另一个Java实例(被调
-
详解Struts2中对未登录jsp页面实现拦截功能
Struts2中拦截器大家都很经常使用,但是拦截器只能拦截action不能拦截jsp页面.这个时候就有点尴尬了,按道理来说没登录的用户只能看login界面不能够通过输入URL进行界面跳转,这显然是不合理的.这里介绍Struts2中Filter实现jsp页面拦截的功能.(有兴趣的人可以去研究Filter过滤器的其它用法,因为利用过滤器也可以实现action拦截的功能) 下面直接上代码,边看边分析实现步骤和原理. 1.web.xml中的配置信息: <filter> <filter-name&
随机推荐
- JDBC连接mysql处理中文时乱码解决办法详解
- oracle命令行删除与创建用户的代码
- Javascript类库的顶层对象名用户体验分析
- IE及IE6浏览器中判断JS文件加载成功失败的方法
- ASP.NET(C#)中遍历所有控件
- PHP多进程编程实例详解
- vue.js如何更改默认端口号8080为指定端口的方法
- mysql root密码的重设方法(亲测可用)
- iOS输出手机系统版本号
- 基于HTML5的可预览多图片Ajax上传
- js封装成插件_Canvas统计图插件编写实例
- 详解 javascript中offsetleft属性的用法
- win2008 iis7 上传大文件限制的真正解决办法
- Windowns Diskpart下合并分区的方法dos下
- 深入了解java8的foreach循环
- Android编程实现的身份证、车牌号正则验证工具类实例
- 开发环境Ubuntu16安装以后的初始化设置
- 解决Vue在封装了Axios后手动刷新页面拦截器无效的问题
- Python Pandas 箱线图的实现
- 详解nginx高并发场景下的优化