Spring MVC表单防重复提交
转载自 Spring MVC表单防重复提交
利用Spring MVC的过滤器及token传递验证来实现表单防重复提交。
创建注解
@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Token { boolean create() default false; boolean remove() default false; }
在跳转页面的方法上加上:@Token(create = true)\在提交的action方法上加上:@Token(remove = true)
创建过滤器
public class TokenInterceptor extends HandlerInterceptorAdapter { private Logger logger = Logger.getLogger(TokenInterceptor.class); private static final String TOKEN = "token"; @Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object handler) throws Exception {if (handler instanceof HandlerMethod) {Method method = ((HandlerMethod) handler).getMethod();Token annotation = method.getAnnotation(Token.class);if (annotation != null) {HttpSession session = request.getSession(); // 创建tokenboolean create = annotation.create();if (create) {session.setAttribute(TOKEN, UUID.randomUUID().toString());return true;} // 删除tokenboolean remove = annotation.remove();if (remove) {if (isRepeatSubmit(request)) {logger.warn("表单不能重复提交:" + request.getRequestURL());return false;}session.removeAttribute(TOKEN);}}} else {return super.preHandle(request, response, handler);}return true;} private boolean isRepeatSubmit(HttpServletRequest request) {String token = (String) request.getSession().getAttribute(TOKEN);if (token == null) {return true;} String reqToken = request.getParameter(TOKEN);if (reqToken == null) {return true;} if (!token.equals(reqToken)) {return true;} return false;} }
配置拦截器
<!--配置拦截器 --> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**" /> <bean class="com.example.web.interceptor.TokenInterceptor"/> </mvc:interceptor> </mvc:interceptors>
表单添加token
<input type="hidden" id="token" name="token" value="$!{session.getAttribute('token')}"/>
在form表单里面添加token域,提交表单时需要传过去。
Spring MVC表单防重复提交相关推荐
- 关于表单防重复提交一些东东
前阵子弄了些表单防重复提交的东西,想整理整理,免得下次要用时再四处去找,其实这里的东西还是挺简单的. 原理: 在Session中保存一个表单的唯一编号,将该编号放在一个隐藏域中,同其他数据一同提交.在 ...
- 表单防重复提交拦截器
表单防重复提交 http://blog.icoolxue.com/submitted-by-spring-mvc-to-prevent-data-duplication/
- python表单防重复提交_防止表单重复提交的几种策略
表单重复提交是在多用户Web应用中最常见.带来很多麻烦的一个问题.有很多的应用场景都会遇到重复提交问题,比如: 点击提交按钮两次. 点击刷新按钮. 使用浏览器后退按钮重复之前的操作,导致重复提交表单. ...
- java表单防重复提交_防止表单重复提交的解决方案整理
用户在操作表单Post数据时往往会出现表单数据重复提交的问题,尤其在Web开发中此类问题比较常见.刷新页面,后退操作以前的页面,单机多次按钮都会导致数据重复提交.此类问题是因为浏览器重复提交HTTP请 ...
- python表单防重复提交_关于PHP使用token防止表单重复提交的方法
这篇文章主要介绍了PHP使用token防止表单重复提交的方法,通过生成一个加密后的随机数存入session的token变量,同时将该值放入表单隐藏提交,达到防止表单重复提交的功能,需要的朋友可以参考下 ...
- python表单防重复提交_传统方式提交表单,防止重复提交问题?
提交表单的时候,不是使用ajax提交,就是传统的表单提交,为防止表单重复提交,应该怎么写javascript或jquery代码呢?如果提交没成功,怎么恢复提交按钮? html如下: Email add ...
- python表单防重复提交_防止二次提交(重复提交)
@每次请求时产生一个token(一般为时间戳),存于session中并随之用hidden提交,在servlet中判断接收到的token和session中的是否一致来判断是否重复提交,如果不是则重新产生 ...
- 表单的重复提交问题解决方案
1.在我们的web开发中,常常会遇到表单的重复提交问题,那么我们的解决方案有两种:①重定向:response.sendrediect(); ②token的使用,即做个标记 下面写一个token的例子: ...
- Spring MVC表单验证(带批注)
这篇文章提供了一个简单HTML表单验证示例. 它基于带有注释的Spring MVC示例. 该代码可在GitHub的Spring-MVC-Form-Validation目录中找到. 数据 在此示例中,我 ...
最新文章
- 在word、excel中如果运用VBA进行编程?
- tensorflow 线性回归
- 通过ArrayList对modCount的操作分析fail-fast 机制
- 北大教授李忠:谁说学数学只是为了升学?数学可以让你受益终生!
- selinux 导致ftp文件夹出错~
- Comprehensive Python Cheatsheet
- iOS in-app purchase详解
- 我们公司使用了 6 年的Spring Boot 项目部署方案!打包 + Shell 脚本部署详解,稳的一批!...
- 工具安装----Clang-format的基本使用
- Halcon 入门教程
- php脚本是什么,PHP脚本的编写
- iOS 开发中出现假死解决思路
- 币圈免公众号源码带多个支付接口
- 数据告诉你,全世界到底有多少人在炒币
- java邮件中添加excel_基于javaMail的邮件发送--excel作为附件
- Unity引擎制作仿《文明》游戏
- 如何安装 ONLYOFFICE Workspace丨安装教程丨使用教程
- 动态站点地图提交百度收录
- 给beanutils注册转换器
- Modern source-to-source transformation with Clang and libTooling
热门文章
- [Java基础]泛型基础
- Decorator(装饰)--对象结构型模式
- Network UVA - 315(Tarjan+连通性问题:求割点)
- Cef mysql.exe_CEF3.2623使用记录:windows编译
- 分析股票大数据_Python大数据分析量学祖师爷网站数据
- mmdnn tensorflow 转 caffe
- nowcoder 牛牛的最大兴趣组 质因子 + 思维
- CF1534F:Falling Sand(tarjan、贪心、dp)
- P3243-[HNOI2015]菜肴制作【拓扑排序,优先队列】
- 2020牛客国庆集训派对day8G-Shuffle Cards【Splay】