Appearance
幂等处理器 ¶
说明 ¶
在要进行幂等控制的方法上添加 @Idempotent
注解,当该方法方法上重复提交时进行拦截。原理是通过创建一个AOP
切面,在切面中拦截添加 @Idempotent
注解的方法, 同时获取当前请求的请求头中的 IdempotentToken
数据,通过redis
的setIfAbsent
命令判断是否已经存在,存的的话抛出异常。推荐在Controller
中的方法上使用, 在非Web环境或者异步方法中无效。
幂等控制需要前端进行配合,前端在发送请求时,在请求头或者QueryString
参数里里放入 IdempotentToken
(幂等令牌) 数据。 通常在是在前端页面生命周期中创建页面时生成一个Token
,放入到这个页面所发出请求的请求头中或请求参数上,当重复发送请求时会被后端拦截该请求,并返回错误提示。
注意:幂等请求的字段名为:
IdempotentToken
注解 ¶
@Idempotent
:
enable
是否开启幂等控制required
是否必须携带幂等token
, 不携带直接不允许访问,并抛出错误timeout
超时时间(毫秒)name
名称,用来区分同一个前端页面发出的不同请求方法(同一页面发送的请求带的Token可能会是重复的)key
key, 用于区分不同请求,支持EL表达式从参数中取值(开发中)message
幂等异常提示消息
使用 ¶
java
@Slf4j
@Tag(name ="测试控制器")
@RestController
@RequestMapping("/test")
@RequiredArgsConstructor
public class TestController {
// 添加幂等拦截注解
@Idempotent
@Operation(summary = "测试")
@GetMapping("/hello")
public ResResult<String> hello(){
return Res.ok("hello");
}
}
关键类 ¶
IdempotentAop
幂等处理器切面