转载自 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表单防重复提交相关推荐

  1. 关于表单防重复提交一些东东

    前阵子弄了些表单防重复提交的东西,想整理整理,免得下次要用时再四处去找,其实这里的东西还是挺简单的. 原理: 在Session中保存一个表单的唯一编号,将该编号放在一个隐藏域中,同其他数据一同提交.在 ...

  2. 表单防重复提交拦截器

    表单防重复提交 http://blog.icoolxue.com/submitted-by-spring-mvc-to-prevent-data-duplication/

  3. python表单防重复提交_防止表单重复提交的几种策略

    表单重复提交是在多用户Web应用中最常见.带来很多麻烦的一个问题.有很多的应用场景都会遇到重复提交问题,比如: 点击提交按钮两次. 点击刷新按钮. 使用浏览器后退按钮重复之前的操作,导致重复提交表单. ...

  4. java表单防重复提交_防止表单重复提交的解决方案整理

    用户在操作表单Post数据时往往会出现表单数据重复提交的问题,尤其在Web开发中此类问题比较常见.刷新页面,后退操作以前的页面,单机多次按钮都会导致数据重复提交.此类问题是因为浏览器重复提交HTTP请 ...

  5. python表单防重复提交_关于PHP使用token防止表单重复提交的方法

    这篇文章主要介绍了PHP使用token防止表单重复提交的方法,通过生成一个加密后的随机数存入session的token变量,同时将该值放入表单隐藏提交,达到防止表单重复提交的功能,需要的朋友可以参考下 ...

  6. python表单防重复提交_传统方式提交表单,防止重复提交问题?

    提交表单的时候,不是使用ajax提交,就是传统的表单提交,为防止表单重复提交,应该怎么写javascript或jquery代码呢?如果提交没成功,怎么恢复提交按钮? html如下: Email add ...

  7. python表单防重复提交_防止二次提交(重复提交)

    @每次请求时产生一个token(一般为时间戳),存于session中并随之用hidden提交,在servlet中判断接收到的token和session中的是否一致来判断是否重复提交,如果不是则重新产生 ...

  8. 表单的重复提交问题解决方案

    1.在我们的web开发中,常常会遇到表单的重复提交问题,那么我们的解决方案有两种:①重定向:response.sendrediect(); ②token的使用,即做个标记 下面写一个token的例子: ...

  9. Spring MVC表单验证(带批注)

    这篇文章提供了一个简单HTML表单验证示例. 它基于带有注释的Spring MVC示例. 该代码可在GitHub的Spring-MVC-Form-Validation目录中找到. 数据 在此示例中,我 ...

最新文章

  1. 在word、excel中如果运用VBA进行编程?
  2. tensorflow 线性回归
  3. 通过ArrayList对modCount的操作分析fail-fast 机制
  4. 北大教授李忠:谁说学数学只是为了升学?数学可以让你受益终生!
  5. selinux 导致ftp文件夹出错~
  6. Comprehensive Python Cheatsheet
  7. iOS in-app purchase详解
  8. 我们公司使用了 6 年的Spring Boot 项目部署方案!打包 + Shell 脚本部署详解,稳的一批!...
  9. 工具安装----Clang-format的基本使用
  10. Halcon 入门教程
  11. php脚本是什么,PHP脚本的编写
  12. iOS 开发中出现假死解决思路
  13. 币圈免公众号源码带多个支付接口
  14. 数据告诉你,全世界到底有多少人在炒币
  15. java邮件中添加excel_基于javaMail的邮件发送--excel作为附件
  16. Unity引擎制作仿《文明》游戏
  17. 如何安装 ONLYOFFICE Workspace丨安装教程丨使用教程
  18. 动态站点地图提交百度收录
  19. 给beanutils注册转换器
  20. Modern source-to-source transformation with Clang and libTooling

热门文章

  1. [Java基础]泛型基础
  2. Decorator(装饰)--对象结构型模式
  3. Network UVA - 315(Tarjan+连通性问题:求割点)
  4. Cef mysql.exe_CEF3.2623使用记录:windows编译
  5. 分析股票大数据_Python大数据分析量学祖师爷网站数据
  6. mmdnn tensorflow 转 caffe
  7. nowcoder 牛牛的最大兴趣组 质因子 + 思维
  8. CF1534F:Falling Sand(tarjan、贪心、dp)
  9. P3243-[HNOI2015]菜肴制作【拓扑排序,优先队列】
  10. 2020牛客国庆集训派对day8G-Shuffle Cards【Splay】