Springboot后端使用Form表单防重复提交的代码

it2023-11-07  73

redisCachekey:value; value里面存放请求数据的信息(body,以及时间) 如果存在则比较, 请求参数, 发送的时间。 如果不存在则直接将 请求信息和发送时间 放到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; }
最新回复(0)