redisCache
clave: valor; La información (cuerpo y hora) de los datos de solicitud almacenados en el valor se compara si existe, el parámetro de solicitud y la hora de envío. Si no existe, ponga la información de la solicitud y el tiempo de envío directamente en 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) ;
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 ( ) ) ;
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 ;
}