/**
*
*/
package XXX;
import java.util.*;
/**
* @author Kevin Kitanski
* 防止报文重复提交
* @Description:TODO
*/
public class RepeatedMSGChecker {
TreeMap<Date,String> mtm_cache=new TreeMap<Date,String>();
long ml_second=20;
int mnCacheLen=10;
public RepeatedMSGChecker()
{
}
public void regA(String psStr)
{
}
static Map<String,RepeatedMSGChecker> tmAllMap=new HashMap<String,RepeatedMSGChecker>();
public static boolean checkSubmit(String psCategory, String pMsg)
{
RepeatedMSGChecker moInstance=null;
if (tmAllMap.containsKey(psCategory)==false)
{
moInstance=new RepeatedMSGChecker();
TreeMap<Date,String> tm_dt=new TreeMap<Date,String>();
tmAllMap.put(psCategory, moInstance);
moInstance.bCheckRepeated(pMsg);
return false;
}
moInstance=tmAllMap.get(psCategory);
return moInstance.bCheckRepeated(pMsg);
}
public boolean bCheckRepeated(String pmsg)
{
//https://programming.vip/docs/6-ways-to-prevent-repeated-data-submission-super-simple.html
boolean rbReturn=false;
synchronized (this)
{
Date ahora=new Date();
cleanCache(ahora);
if (mtm_cache.containsValue(pmsg))
rbReturn=true;
mtm_cache.put(ahora,pmsg);
}
return rbReturn;
}
public void cleanCache(Date pDate)
{
Set<Date> vs_date=new HashSet<Date>();
for (Date vAddKey:this.mtm_cache.keySet())
if (((pDate.getTime()-vAddKey.getTime())/1000)>ml_second)
vs_date.add(vAddKey);
for (Date wdate:vs_date)
mtm_cache.remove(wdate);
}
}
防止重复提交
于 2022-10-19 15:24:23 首次发布