架构实现:SpringAop+Redis
实现目的:为了防止同一用户对目标接口指定时间范围内的多次请求。(防止重复请求)
实现前提:用户登录成功以后需要将用户信息保存到HttpSession中,以备在SpringAop中使用。
实现原理:
1、自定义注解。标注了自定义注解的接口将会被限制重复访问。

2、配置自定义注解。在SpringAop中对自定义的注解设为切入点,并通过环绕的方式对切入点前后做业务处理。

3、切入点之前的操作:
①通过HttpSession获取当前登录用户的信息
②加锁:将当前用户名和执行的方法名联合作为redis唯一key,UUID作为当前key的唯一值,注解中的lockTime作为数据失效时间,存入redis。

③存入redis:根据唯一key查询是否存在,存在则说明为重复请求;不存在则插入数据。

4、切入点之后的操作:
①解锁:根据唯一key和clientId进行解锁

②redis:根据唯一key查询redis,若无数据则属于失效自动解锁;获取到数据并且clientId相同则根据key删除数据,完成解锁。

written by Raysen
2021/1/15