|
@@ -0,0 +1,237 @@
|
|
|
+package com.dragoninfo.dcuc.auth.business.impl;
|
|
|
+
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
+import cn.hutool.http.HttpRequest;
|
|
|
+import com.dragoninfo.dcuc.auth.AuthRedisConstant;
|
|
|
+import com.dragoninfo.dcuc.auth.auth.enumresources.BimTokenResultEnum;
|
|
|
+import com.dragoninfo.dcuc.auth.auth.vo.bim.*;
|
|
|
+import com.dragoninfo.dcuc.auth.business.IBimBusiness;
|
|
|
+import com.dragoninfo.dcuc.auth.config.DcucAuthConfig;
|
|
|
+import com.dragonsoft.duceap.commons.util.UUIDUtils;
|
|
|
+import com.dragonsoft.duceap.commons.util.json.JsonUtils;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.data.redis.core.RedisTemplate;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+import java.util.Collections;
|
|
|
+import java.util.List;
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author huangzqa
|
|
|
+ * @date 2021/4/9
|
|
|
+ **/
|
|
|
+@Slf4j
|
|
|
+@Service
|
|
|
+public class BimBusinessImpl implements IBimBusiness {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private DcucAuthConfig dcucAuthConfig;
|
|
|
+
|
|
|
+ @Resource(name = "redisTemplate")
|
|
|
+ private RedisTemplate<String, Object> redisTemplate;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取 token
|
|
|
+ *
|
|
|
+ * @return token
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public String loginToken() {
|
|
|
+
|
|
|
+ String url = dcucAuthConfig.getBimUrl() + "/api/rest/management/ExtApiMgmtAuthService/login";
|
|
|
+
|
|
|
+ BimLoginReqVo bimLoginReqVo = new BimLoginReqVo();
|
|
|
+ bimLoginReqVo.setLoginId(dcucAuthConfig.getBimLoginId());
|
|
|
+ bimLoginReqVo.setSecretKey(dcucAuthConfig.getBimSecretKey());
|
|
|
+
|
|
|
+ String requestJson = JsonUtils.toJSONString(bimLoginReqVo);
|
|
|
+ log.debug("Bim login request:{}", requestJson);
|
|
|
+ String respJson = HttpRequest.post(url)
|
|
|
+ .body(requestJson)
|
|
|
+ .execute()
|
|
|
+ .body();
|
|
|
+ log.debug("Bim login respJson:{}", respJson);
|
|
|
+
|
|
|
+ BimRespVo bimRespVo = JsonUtils.parseObject(respJson, BimRespVo.class);
|
|
|
+ if (!bimRespVo.getSuccess()) {
|
|
|
+ log.error("Bim login token error :{}", respJson);
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+
|
|
|
+ String token = (String) bimRespVo.getData();
|
|
|
+ redisTemplate.opsForValue().set(AuthRedisConstant.REDIS_BIM_TOKEN_NAMESPACE, token, 9, TimeUnit.MINUTES);
|
|
|
+ return token;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 注销 token
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void logoutToken() {
|
|
|
+
|
|
|
+ String token = String.valueOf(redisTemplate.opsForValue().get(AuthRedisConstant.REDIS_BIM_TOKEN_NAMESPACE));
|
|
|
+ if (StrUtil.isBlank(token)) {
|
|
|
+ log.error("Token is not cache");
|
|
|
+ }
|
|
|
+
|
|
|
+ String url = dcucAuthConfig.getBimUrl() + "/api/rest/management/ExtApiMgmtAuthService/logout";
|
|
|
+
|
|
|
+ BimLogoutReqVo bimLogoutReqVo = new BimLogoutReqVo();
|
|
|
+ bimLogoutReqVo.setToken(token);
|
|
|
+
|
|
|
+ String requestJson = JsonUtils.toJSONString(bimLogoutReqVo);
|
|
|
+ log.debug("Bim logout requestJson:{}", requestJson);
|
|
|
+ String respJson = HttpRequest.post(url)
|
|
|
+ .body(requestJson)
|
|
|
+ .execute()
|
|
|
+ .body();
|
|
|
+ log.debug("Bim logout respJson:{}", respJson);
|
|
|
+
|
|
|
+ BimRespVo bimRespVo = JsonUtils.parseObject(respJson, BimRespVo.class);
|
|
|
+ if (!bimRespVo.getSuccess()) {
|
|
|
+ log.error("Bim logout token error :{}", respJson);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取 token
|
|
|
+ *
|
|
|
+ * @return token
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public String getToken() {
|
|
|
+
|
|
|
+ String token = (String) redisTemplate.opsForValue().get(AuthRedisConstant.REDIS_BIM_TOKEN_NAMESPACE);
|
|
|
+
|
|
|
+ if (StrUtil.isBlank(token)) {
|
|
|
+ // 先注销token
|
|
|
+ logoutToken();
|
|
|
+ // 再获取token
|
|
|
+ token = loginToken();
|
|
|
+ }
|
|
|
+ return token;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 校验令牌
|
|
|
+ *
|
|
|
+ * @param userToken 用户令牌
|
|
|
+ * @param appToken 应用令牌
|
|
|
+ * @return 是否有效
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public boolean checkToken(String userToken, String appToken) {
|
|
|
+ String messageId = UUIDUtils.getUUID();
|
|
|
+ String token = getToken();
|
|
|
+
|
|
|
+ BimTokenCheckItemReqVO bimTokenCheckItemReqVO = new BimTokenCheckItemReqVO();
|
|
|
+ bimTokenCheckItemReqVO.setMessageId(messageId);
|
|
|
+ bimTokenCheckItemReqVO.setUserToken(userToken);
|
|
|
+ bimTokenCheckItemReqVO.setAppToken(appToken);
|
|
|
+
|
|
|
+ BimTokenCheckReqVO bimTokenCheckReqVO = new BimTokenCheckReqVO();
|
|
|
+ bimTokenCheckReqVO.setToken(token);
|
|
|
+ bimTokenCheckReqVO.setContent(Collections.singletonList(bimTokenCheckItemReqVO));
|
|
|
+
|
|
|
+ BimTokenCheckContentRespVO bimTokenCheckContentRespVO = sendRequest(bimTokenCheckReqVO);
|
|
|
+
|
|
|
+ if (bimTokenCheckContentRespVO == null) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ List<BimTokenCheckItemRespVO> content = bimTokenCheckContentRespVO.getContent();
|
|
|
+
|
|
|
+ String validValue = BimTokenResultEnum.VALID.getValue();
|
|
|
+ for (BimTokenCheckItemRespVO hwTokenCheckRespContentVO : content) {
|
|
|
+ String userCheckResult = hwTokenCheckRespContentVO.getUserCheckResult();
|
|
|
+ String appCheckResult = hwTokenCheckRespContentVO.getAppCheckResult();
|
|
|
+
|
|
|
+ if (!userCheckResult.equals(validValue)) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!appCheckResult.equals(validValue)) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 校验用户令牌
|
|
|
+ *
|
|
|
+ * @param userToken 用户令牌
|
|
|
+ * @return 是否有效
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public boolean checkUserToken(String userToken) {
|
|
|
+ String messageId = UUIDUtils.getUUID();
|
|
|
+ String token = getToken();
|
|
|
+
|
|
|
+ BimTokenCheckReqVO hwTokenCheckReqVO = new BimTokenCheckReqVO();
|
|
|
+
|
|
|
+ BimTokenCheckItemReqVO hwTokenCheckReqContentVO = new BimTokenCheckItemReqVO();
|
|
|
+ hwTokenCheckReqContentVO.setAppToken("");
|
|
|
+ hwTokenCheckReqContentVO.setUserToken(userToken);
|
|
|
+ hwTokenCheckReqContentVO.setMessageId(messageId);
|
|
|
+
|
|
|
+ hwTokenCheckReqVO.setToken(token);
|
|
|
+ hwTokenCheckReqVO.setContent(Collections.singletonList(hwTokenCheckReqContentVO));
|
|
|
+
|
|
|
+ BimTokenCheckContentRespVO hwTokenCheckRespVO = sendRequest(hwTokenCheckReqVO);
|
|
|
+ if (hwTokenCheckRespVO == null) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ List<BimTokenCheckItemRespVO> content = hwTokenCheckRespVO.getContent();
|
|
|
+
|
|
|
+ String validValue = BimTokenResultEnum.VALID.getValue();
|
|
|
+ for (BimTokenCheckItemRespVO hwTokenCheckRespContentVO : content) {
|
|
|
+ String userCheckResult = hwTokenCheckRespContentVO.getUserCheckResult();
|
|
|
+
|
|
|
+ if (!userCheckResult.equals(validValue)) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 发送请求
|
|
|
+ *
|
|
|
+ * @param hwTokenCheckReqVO 请求
|
|
|
+ * @return 返回值
|
|
|
+ */
|
|
|
+ private BimTokenCheckContentRespVO sendRequest(BimTokenCheckReqVO hwTokenCheckReqVO) {
|
|
|
+ String reqJson = JsonUtils.toJSONString(hwTokenCheckReqVO);
|
|
|
+
|
|
|
+ log.info("Token check req :{}", reqJson);
|
|
|
+
|
|
|
+ String url = dcucAuthConfig.getBimUrl() + "/api/rest/customization/ExpApiCustomDragonitService/tokenCheck";
|
|
|
+
|
|
|
+ log.info("Token check req url:{}", reqJson);
|
|
|
+ String postResp = HttpRequest.post(url)
|
|
|
+ .body(reqJson)
|
|
|
+ .execute()
|
|
|
+ .body();
|
|
|
+ log.info("Token check resp :{}", postResp);
|
|
|
+
|
|
|
+ BimTokenCheckRespVO bimRespVo = JsonUtils.parseObject(postResp, BimTokenCheckRespVO.class);
|
|
|
+
|
|
|
+ if (!bimRespVo.getSuccess()) {
|
|
|
+ log.error("Token check error:{}", postResp);
|
|
|
+ }
|
|
|
+
|
|
|
+ return bimRespVo.getData();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void cacheUserToken(String idcard, String userToken, Integer expAt) {
|
|
|
+ redisTemplate.opsForValue().set(AuthRedisConstant.REDIS_USER_TOKEN_NAMESPACE + idcard, userToken, expAt, TimeUnit.SECONDS);
|
|
|
+ }
|
|
|
+}
|