Skip to content

幂等处理器

说明

在要进行幂等控制的方法上添加 @Idempotent 注解,当该方法方法上重复提交时进行拦截。原理是通过创建一个AOP切面,在切面中拦截添加 @Idempotent 注解的方法, 同时获取当前请求的请求头中的 IdempotentToken 数据,通过redissetIfAbsent命令判断是否已经存在,存的的话抛出异常。推荐在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 幂等处理器切面
本文档内容版权属于济南易杯光年软件技术有限公司,保留所有权利