Springboot backend uses Form form to prevent duplicate submission code

  1. redisCache
  2. key:value;
    The information (body, and time) of the request data stored in the value
    is compared if it exists, the request parameter, and the sending time.
    If it does not exist, put the request information and sending time directly into redisCache
private int intervalTime = 10;

public void setIntervalTime(int intervalTime)
{
    
    
    this.intervalTime = intervalTime;
}
public boolean isRepeatSubmit(HttpServletRequest request)
{
    
    
    // 本次参数及系统时间
    RepeatedlyRequestWrapper repeatedlyRequest = (RepeatedlyRequestWrapper) request;
    String nowParams = HttpHelper.getBodyString(repeatedlyRequest);

    // body参数为空,获取Parameter的数据
    if (StringUtils.isEmpty(nowParams))
    {
    
    
        nowParams = JSONObject.toJSONString(request.getParameterMap());
    }
    Map<String, Object> nowDataMap = new HashMap<String, Object>();
    nowDataMap.put(REPEAT_PARAMS, nowParams);
    nowDataMap.put(REPEAT_TIME, System.currentTimeMillis());

    // 请求地址(作为存放cache的key值)
    String url = request.getRequestURI();

    HttpSession session = request.getSession();
    Object sessionObj = redisCache.getCacheObject(SESSION_REPEAT_KEY);
    if (sessionObj != null)
    {
    
    
        Map<String, Object> sessionMap = (Map<String, Object>) sessionObj;
        if (sessionMap.containsKey(url))
        {
    
    
            Map<String, Object> preDataMap = (Map<String, Object>) sessionMap.get(url);
            if (compareParams(nowDataMap, preDataMap) && compareTime(nowDataMap, preDataMap))
            {
    
    
                return true;
            }
        }
    }
    Map<String, Object> cacheMap = new HashMap<String, Object>();
    cacheMap.put(url, nowDataMap);
    redisCache.setCacheObject(SESSION_REPEAT_KEY, cacheMap, intervalTime, TimeUnit.SECONDS);
    return false;
}

Guess you like

Origin blog.csdn.net/wangleisuiqiansuiyue/article/details/109191737