如何完成幂等 前端阻拦
前端阻拦是指经过 Web 站点的页面进行申请阻拦,好比在用户点击完“提交”按钮后,咱们能够把按钮设置为不成用或者暗藏形态,防止用户反复点击。
该办法能够解决用户误操作提交两次表单所发生的反复提交问题。但前端阻拦有一个致命的问题,假如是懂行的顺序员或者黑客能够间接绕过页面的 JS 履行,间接摹拟申请后真个接口,这样的话,咱们前真个这些阻拦就不克不及失效了。因此除了前端阻拦一部份正常的误操作以外,后真个验证必不成少。
数据库独一索引完成
数据库独一索引完成计划个别只能合用于履行拔出曾经操作的进程。
详细流程步骤:
建设一张去重表,其中某个字段需求建设独一索引客户端去申请办事端,办事端会将这次申请的一些信息拔出曾经这张去重表中由于表中某个字段带有独一索引,假如拔出曾经胜利,证实表中没有这次申请的信息,则履行后续的业务逻辑假如拔出曾经失败,则代表曾经履行过以后申请,间接前往数据库乐观锁完成数据库乐观锁计划个别只能合用于履行更新操作的进程,咱们能够提前在对应的数据表中多添加一个字段,充任以后数据的版本标识。
这样每次对该数据库该表的这条数据履行更新时,都会将该版本标识作为一个前提,值为上次待更新数据中的版本标识的值。
详细流程步骤:
客户端带着version字段申请办事端办事端履行update的时分需求给version+1,而且需求加version的更新前提如下SQLupdate t set stock = stock - 1 , version = version + 1 where id = #{id} and version = #{version} 数据库灰心锁完成