AuthService.java 2.63 KB
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<String, String> 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<String> 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<String, String> createAuthHeader(String account) throws Exception {
        Map<String, String> headers = new HashMap<>();
        headers.put("Authorization", "Bearer " + getTokenByAccount(account));
        return headers;
    }


}