限制API重复提交 - xinwu-yang/cube-java GitHub Wiki

since 2.5.x

如何使用

  1. 使用注解 @LimitSubmit
// value 表达式
// cycle 允许重复周期(单位:秒)
// afterDeleteKey 函数执行完成后是否删除缓存中的key以便可以重复调用该函数
// message 重复执行后的提示用语
@LimitSubmit(value = "deleteUser:%s:#id", cycle = 10, afterDeleteKey = true, message = "请勿重复提交!")
  1. 表达式详解:
%s 代表当前登录人
#参数 代表从参数中获取,支持多个参数,参数支持从对象中获取

示例

// 示例1:
@LimitSubmit("deleteUser:%s:#id")
@DeleteMapping("/delete")
public Result<?> delete(@RequestParam String id) {
	sysUserService.deleteUser(id);
	return Result.ok();
}
// 通过表达式生成的值为:deleteUser:admin:1546724897888190466

// 示例2:
@PostMapping("/sms")
@LimitSubmit(value = "sendSms:#sendSMSRequest.mobile", cycle = 600, message = "验证码10分钟内,仍然有效!")
public Result<?> sms(@RequestBody SendSMSRequest sendSMSRequest) {
	loginService.sendSms(sendSMSRequest.getMobile(), sendSMSRequest.getSmsmode());
	return Result.ok();
}
// 通过表达式生成的值为:sendSms:18611111111

高级用法

  1. 限制对某个接口的访问,针对所有人,则去除 %s
  2. 限制某个人对某个接口的访问,则添加 %s
  3. 限制某个人对某个接口的业务参数的访问,则添加 %s:#参数1:#参数2
  4. 表达式支持嵌套:person.friend[5].name