package com.hotent.sdk.service; import cn.hutool.core.util.StrUtil; import com.hotent.sdk.commom.SDKResult; import com.hotent.sdk.constants.APIConstant; import com.hotent.sdk.exception.SDKException; import com.hotent.sdk.properties.AppProperty; import com.hotent.sdk.utils.HttpClientResult; import com.hotent.sdk.utils.HttpClientUtils; import org.apache.http.HttpStatus; import org.springframework.util.Assert; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * 认证获取用户token服务 * * @author liangjc * @company 广州宏天软件股份有限公司 * @email liangjc@jee-soft.cn * @date 2023-07-18 15:12 */ public class AuthService { private AppProperty appProperty; public AuthService(AppProperty appProperty) { this.appProperty = appProperty; } //用户账号和token信息 public ConcurrentHashMap tokenCache = new ConcurrentHashMap(); /** * 1.从缓存中获取账号token信息 * 2.根据外部系统code和secretKey获取用户token,并放到内存中 * * @param account * @return * @throws Exception */ public String getTokenByAccount(String account) throws Exception { if (tokenCache.containsKey(account)) { return tokenCache.get(account); } String url = new StringBuilder().append(this.appProperty.getAuthAddress()) .append(APIConstant.GET_TOKEN_URL).append("?").append("sysCode=").append(this.appProperty.getSysCode()) .append("&").append("secretKey=").append(this.appProperty.getSecretKey()) .append("&").append("account=").append(account).toString(); HttpClientResult result = HttpClientUtils.doGet(url); Assert.isTrue(result.getCode() == HttpStatus.SC_OK, StrUtil.format("根据用户获取token失败,http响应状态码{},响应信息:{}", result.getCode(), result.getContent())); SDKResult sdkResult = SDKResult.trans(result.getContent()); if (!sdkResult.getState()) { throw new SDKException(StrUtil.format("根据用户账号获取认证信息失败!{}", sdkResult.getMessage())); } tokenCache.put(account, sdkResult.getValue()); return sdkResult.getValue(); } /** * 根据账号封装请求头token信息 * * @param account * @return * @throws Exception */ public Map createAuthHeader(String account) throws Exception { Map headers = new HashMap<>(); headers.put("Authorization", "Bearer " + getTokenByAccount(account)); return headers; } }