使用Map集合缓存管理Token
package com.ai.sfframe.professional;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.asiainfo.appframe.ext.flyingserver.org.apache.commons.lang.StringUtils;
/**
* @Description 获取token
* @Author yanglu5
* @Date 2021年1月15日
* @Version v1.0
*/
public class TokenManager {
private static Log log = LogFactory.getLog(TokenManager.class);
/**
* 存储token
*/
private static Map<String, String> tokenMap = new HashMap<String, String>();
/**
* 获取token
*/
public static String getToken() {
if (null == tokenMap.get("access_token")) {
synchronized (TokenManager.class) {
if (null == tokenMap.get("access_token")) {
refreshToken();
}
}
}
return tokenMap.get("access_token");
}
/**
* 刷新token值
*/
@SuppressWarnings("unchecked")
public static void refreshToken() {
// 重新获取token
//Map<String, Object> inputMap = new HashMap<String, Object>();
//Map<String, Object> resultMap = new Auth().authHandler(inputMap);
//String accessToken = (String) resultMap.get("accessToken");
String accessToken = UUID.randomUUID().toString();
if (StringUtils.isNotEmpty(accessToken)) {
tokenMap.put("access_token", accessToken);
}
}
/**
* token失效,刷新后重新获取
*/
public synchronized static String expiresAndGetToken() {
refreshToken();
return getToken();
}
public static void main(String[] args) throws InterruptedException {
for (int i = 10; i < 100; i++) {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + ";" + TokenManager.getToken());
}
}, "线程" + i).start();
}
Thread.sleep(5000);
System.out.println(Thread.currentThread().getName() + ";" + TokenManager.getToken());
Thread.sleep(5000);
System.out.println(expiresAndGetToken());
}
}