package com.hotent.system.util; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ObjectNode; import com.hotent.base.util.JsonUtil; import com.hotent.base.util.StringUtil; import com.hotent.base.util.TenantUtil; import com.hotent.system.consts.FlyBookConsts; import com.hotent.system.model.TokenModel; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; import java.util.concurrent.ConcurrentHashMap; /** * *
* 描述:飞书accessToken工具类 * 作者:欧阳高龙 * 日期:2022-04-29 10:30 * 版权:广州宏天软件有限公司 **/ public class FlybookTokenUtil { protected static Logger log = LoggerFactory.getLogger(FlybookTokenUtil.class); /** * H5微应用的token */ private static ConcurrentHashMap
* 1.如果没有初始化则远程请求获取。 * 2.如果已经初始化并且未过期,直接获取。 * 1.如果已经过期则重新获取。 ** @return */ public static synchronized String getToken() throws IOException { //没有初始化直接获取。 TokenModel model = ExtUniUtil.getModel(modelList); if(!model.isInit()){ return requestToken(); } else{ //如果token要过期则重新获取。 if(model.isExpire(model.getLastUpdTime(),model.getExprieIn())){ return requestToken(); } else{ //从缓存中获取。 return model.getToken(); } } } /** * https请求api获取token。 * @return */ private static String requestToken() throws IOException { String url= FlyBookConsts.getTenantTokenUrl(); ObjectNode objectNode = JsonUtil.getMapper().createObjectNode(); objectNode.put("app_id", FlyBookConsts.getUnite().getCorpId()); objectNode.put("app_secret", FlyBookConsts.getUnite().getCorpSecret()); String rtn= FlybookHttpUtil.sendHttpsRequest(url, JsonUtil.toJson(objectNode), FlyBookConsts.METHOD_POST); JsonNode jsonObj = JsonUtil.toJsonNode(rtn); //取到了 if(jsonObj.get("code").asInt()==0){ String token=jsonObj.get("tenant_access_token").asText(); int expireIn=jsonObj.get("expire").asInt(); TokenModel model = new TokenModel(); model.setCorpToken(token, expireIn); ExtUniUtil.putModel(model, modelList); return token; } //获取失败 else{ TokenModel model = new TokenModel(); model.setInit(false); ExtUniUtil.putModel(model, modelList); String errMsg=jsonObj.get("msg").asText(); log.error(errMsg); throw new RuntimeException("获取accessToken失败: