等幂性,
防止重复认证。 多次发送同一个消息,比如,购买的时候,如果发生重复点击的话。那么你就可能交两份钱。
SpringBoot框架下的(其实和SpringBoot没关系)
具体执行
1.当客户端发送以后以后,服务端返回一个token认证。同时token存入服务端到HashMap中
2.然后token认证,由ScheduledExecutorService创建一个线程,和一个任务,过期时间设置为10秒左右。 10秒内token被存储到服务端中。10秒以后删除。
3.创建一个时间任务,任务倒计时。倒计时结束以后从HashMap删除任务。
创建线程池
//创建线程池
private ScheduledExecutorService pool = Executors.newScheduledThreadPool(2);
public Map<String,Object> map=new HashMap<String,Object>();
public String token;
public String name;
public long midTime=1000*60;
时间任务
class TimeTask1 implements Callable<String> {
private long midTime=7500*10;
private String bcd;
private boolean mid;
public TimeTask1(String bcd){
this.bcd=bcd;
}
@Override
public String call() throws Exception {
while (!mid){
midTime=midTime-1000;
System.out.println("session时间"+midTime+"___+++++"+bcd);
Thread.sleep(1000);
if(midTime<=0){
System.out.println("被删除");
map.remove(bcd);
Set<String> set=map.keySet();
for (String string:set){
System.out.println("&&&&&&&&&&&&&"+string);
}
mid=!mid;
}
}
return bcd;
}
}
创建与存储token,还有获取token
public String setTokenMap(String nickName){
String bcd=alert_random();
map.put(bcd,nickName);
TimeTask1 timeTask1=new TimeTask1(bcd);
pool.schedule(timeTask1,0,TimeUnit.SECONDS);
return bcd;
}