Appearance
幂等处理器 ¶
说明 ¶
在要进行幂等控制的方法上添加 @Idempotent 注解,当该方法方法上重复提交时进行拦截。原理是通过创建一个AOP切面,在切面中拦截添加 @Idempotent 注解的方法, 同时获取当前请求的请求头中的 IdempotentToken 数据,通过redis的setIfAbsent命令判断是否已经存在,存的的话抛出异常。推荐在Controller中的方法上使用, 在非Web环境或者异步方法中无效。
幂等控制需要前端进行配合,前端在发送请求时,在请求头或者QueryString参数里里放入 IdempotentToken(幂等令牌) 数据。 通常在是在前端页面生命周期中创建页面时生成一个Token,放入到这个页面所发出请求的请求头中或请求参数上,当重复发送请求时会被后端拦截该请求,并返回错误提示。
注意:幂等请求的字段名为:
IdempotentToken
注解 ¶
@Idempotent:
enable是否开启幂等控制required是否必须携带幂等token, 不携带直接不允许访问,并抛出错误timeout超时时间(毫秒)name名称,用来区分同一个前端页面发出的不同请求方法(同一页面发送的请求带的Token可能会是重复的)keykey, 用于区分不同请求,支持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幂等处理器切面
