基于redis实现防重提交

自定义防重提交

1. 自定义注解
import java.lang.annotation.*;

/**
 * 自定义防重提交
 * @author 
 * @date 2023年9月6日11:19:13
 */
@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface RepeatSubmit {
   


    /**
     * 默认防重提交,是方法参数
     * @return
     */
    Type limitType() default Type.PARAM;


    /**
     * 加锁过期时间,默认是5秒
     * @return
     */
    long lockTime() default 5;

    /**
     * 规定周期内限制次数
     */
    int maxCount() default 1;

    /**
     * 触发限制时的消息提示
     */
    String msg() default "操作频率过高";


    /**
     * 防重提交,支持两种,一个是方法参数,一个是令牌
     */
    enum Type {
   
        PARAM(1, "方法参数"), TOKEN(2, "令牌");

        private int id;

        private String name;


        Type() {
   

        }

        Type(int id, String name) {
   
            this.id = id;
            this.name = name;
        }

        public int getId() {
   
            return id;
        }

        public String getName() {
   
            return this.name;
        }

    }

    /**
     * 是否需要登录
     * @return
     */
    boolean needLogin() default false;
}


2. 基于环绕通知实现限流锁
import cn.hutool.extra.servlet.ServletUtil;
import com.qihoo.mssosservice.annotation.RepeatSubmit;
import com.qihoo.mssosservice.constants.Constants;
import com.qihoo.mssosservice.model.resp.RestfulResult;
import com.redxun.common.utils.ContextUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.

你可能感兴趣的:(redis,java,springboot)