接⼝幂等性.png 六、如何实现幂等性
数据库乐观锁.png
例如,存在如下的数据表中:
原始表结构.jpg
基于乐观锁实现幂等性的表结构.png
③ 然后将该串存⼊ Redis 数据库中,以该 Token 作为 Redis 的键(注意设置过期时间)。
④ 将 Token 返回到客户端,客户端拿到后应存到表单隐藏域中。
⑤ 客户端在执⾏提交表单时,把 Token 存⼊到 Headers 中,执⾏业务请求带上该 Headers。
⑥ 服务端接收到请求后从 Headers 中拿到 Token,然后根据 Token 到 Redis 中查该 key 是否存在。
⑦ 服务端根据 Redis 中是否存该 key 进⾏判断,如果存在就将该 key 删除,然后正常执⾏业务逻辑。如果不存在就抛异常,返回重复提交的错误信息。
七、防重To k en令牌代码实现
⾸先构建⼀个SpringBoot项⽬,maven依赖如下:
⽗⼯程:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSche
ma-instance"
xsi:schemaLocation="/POM/4.0.0 /xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.cube</groupId>
<artifactId>share</artifactId>
<version>0.0.1-SNAPSHOT</version>
<modules>
<module>dynamic-proxy</module>
<module>idempotence</module>
</modules>
<name>share</name>
<description>share project</description>
<packaging>pom</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.3</version>
</parent>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<mavenpiler.source>1.8</mavenpiler.source>
<mavenpiler.target>1.8</mavenpiler.target>
<boot.version>2.4.3</boot.version>
<druid.version>1.1.10</druid.version>
<mysql.version>8.0.18</mysql.version>
<mybatis.boot.version>2.0.1</mybatis.boot.version>
</properties>
<dependencyManagement>
<dependencies>
<!--spring-boot-web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${boot.version}</version>
</dependency>
<!--mysql + druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
springboot aop<version>${mysql.version}</version>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论