防止表单重复提交的方法

防止表单重复提交的方法

  这里是关于防止表达提交的一些方法

  1.js屏蔽提交按钮(不提倡)

    通过前端屏蔽提交按钮是很不安全的,可以通过浏览器修改js取消屏蔽,因此不提倡

  2.给数据库设置唯一约束。(简单暴力)

    给id等字段设置唯一键约束,在重复提交时会报错,但有很多局限性,很多情况不适用

  3.利用Session防止表单重复提交(推荐)

    实现原理:

  服务器返回表单页面时,会先生成一个subToken保存于session,并把该subToen传给表单页面。当表单提交时会带上subToken,服务器拦截器
  Interceptor会拦截该请求,拦截器判断session保存的subToken和表单提交subToken是否一致。若不一致或session的subToken为空或表单未携带
  subToken则不通过。

  首次提交表单时session的subToken与表单携带的subToken一致走正常流程,然后拦截器内会删除session保存的subToken。当再次提交表单时由于
  session的subToken为空则不通过。从而实现了防止表单重复提交。

  4.使用AOP自定义切入实现

  自定义防止重复提交标记(@AvoidRepeatableCommit)。
  对需要防止重复提交的Congtroller里的mapping方法加上该注解。
  新增Aspect切入点,为@AvoidRepeatableCommit加入切入点。
  每次提交表单时,Aspect都会保存当前key到reids(须设置过期时间)。
  重复提交时Aspect会判断当前redis是否有该key,若有则拦截。

猜你喜欢

转载自www.cnblogs.com/zxlsblog/p/11295878.html
今日推荐