项目在运行时期,访问时会因为网络卡顿等原因造成重复点击,多次提交的问题。
尝试在前端做过限制,之后觉得使用redis 更为简单。
1. redis 可以 设置过期时间,符合需求
2.使用spring aop,只需要配置第一次,之后不需要更改
实现思路,用户10秒内不能执行第二次新增方法,以用户ID 作为 key。
AOP
@Aspect
@Component
public class FlowRateLimit {
@Resource(name="RedisServiceImpl")
private RedisService redisService;
//配置哪些方法需要拦截
public static final String POINT = "execution (* com.sub.serviceimpl.ProcessSaveStartServiceImpl.*(..))";
@Before(POINT)
public void saveLimit(JoinPoint point) {
String key = GlobalConstant.RedisTool.SAVELIMIT + SessionContext.get().getAd_user_id();
String s = redisService.get(key);
//查询redis 中是否存在此key 无则添加,有则抛出异常
if (StringUtils.isBlank(s)){
redisService.addIncludeTime(key, GlobalConstant.RedisTool.INITIALVALUE,10);
}else {
throw new MyExcep