瀏覽代碼

feat: 增加权限变更通知

huangzqa 2 年之前
父節點
當前提交
f237b24730

+ 7 - 2
dcuc-auth-model/src/main/java/com/dragoninfo/dcuc/auth/auth/vo/AuthNoticeReq.java → dcuc-auth-model/src/main/java/com/dragoninfo/dcuc/auth/auth/vo/AuthNoticeReqVO.java

@@ -1,5 +1,9 @@
 package com.dragoninfo.dcuc.auth.auth.vo;
 
+import lombok.Data;
+
+import java.util.List;
+
 /**
  * <p>
  * 权限通知请求
@@ -8,11 +12,12 @@ package com.dragoninfo.dcuc.auth.auth.vo;
  * @author huangzqa
  * @date 2022/8/24
  */
-public class AuthNoticeReq {
+@Data
+public class AuthNoticeReqVO {
 
     /**
      * 用户令牌标识
      */
-    private String userTokenId;
+    private List<String> userTokenId;
 
 }

+ 3 - 1
dcuc-auth-model/src/main/java/com/dragoninfo/dcuc/auth/auth/vo/AuthNoticeResp.java → dcuc-auth-model/src/main/java/com/dragoninfo/dcuc/auth/auth/vo/AuthNoticeRespVO.java

@@ -1,6 +1,7 @@
 package com.dragoninfo.dcuc.auth.auth.vo;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
 
 /**
  * <p>
@@ -10,7 +11,8 @@ import com.fasterxml.jackson.annotation.JsonProperty;
  * @author huangzqa
  * @date 2022/8/24
  */
-public class AuthNoticeResp {
+@Data
+public class AuthNoticeRespVO {
 
     /**
      * 状态码

+ 6 - 0
dcuc-auth-service/src/main/java/com/dragoninfo/dcuc/auth/business/INotifyBusiness.java

@@ -16,4 +16,10 @@ public interface INotifyBusiness {
      */
     void sendAppPermissionUpdateNotify(List<String> userToken);
 
+    /**
+     * 发送变更通知
+     *
+     * @param userToken 用户令牌
+     */
+    void sendPermissionUpdateNotify(List<String> userToken);
 }

+ 54 - 1
dcuc-auth-service/src/main/java/com/dragoninfo/dcuc/auth/business/impl/NotifyBusinessImpl.java

@@ -2,6 +2,8 @@ package com.dragoninfo.dcuc.auth.business.impl;
 
 import cn.hutool.http.HttpRequest;
 import cn.hutool.json.JSONUtil;
+import com.dragoninfo.dcuc.auth.auth.vo.AuthNoticeReqVO;
+import com.dragoninfo.dcuc.auth.auth.vo.AuthNoticeRespVO;
 import com.dragoninfo.dcuc.auth.auth.vo.bim.BimAppPermissionUpdateContentRespVO;
 import com.dragoninfo.dcuc.auth.auth.vo.bim.BimAppPermissionUpdateReqVO;
 import com.dragoninfo.dcuc.auth.auth.vo.bim.BimAppPermissionUpdateRespVo;
@@ -10,6 +12,8 @@ import com.dragoninfo.dcuc.auth.business.INotifyBusiness;
 import com.dragoninfo.dcuc.auth.config.DcucAuthConfig;
 import com.dragonsoft.duceap.commons.util.UUIDUtils;
 import com.dragonsoft.duceap.commons.util.json.JsonUtils;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.remoting.RemoteAccessException;
@@ -34,6 +38,7 @@ public class NotifyBusinessImpl implements INotifyBusiness {
     @Autowired
     private IBimBusiness bimBusiness;
 
+
     @Retryable(value = RemoteAccessException.class,
             maxAttempts = 5,
             backoff = @Backoff(delay = 1000)
@@ -41,7 +46,7 @@ public class NotifyBusinessImpl implements INotifyBusiness {
     @Override
     public void sendAppPermissionUpdateNotify(List<String> tokenList) {
         if (tokenList.isEmpty()) {
-            log.info("Is't have userToken notify.");
+            log.info("Isn't have userToken notify.");
             return;
         }
         String notifyUrl = dcucAuthConfig.getBimUrl() + "/api/rest/customization/ExpApiCustomDragonitService/appPermissionUpdate";
@@ -84,6 +89,54 @@ public class NotifyBusinessImpl implements INotifyBusiness {
         }
     }
 
+
+    @Override
+    public void sendPermissionUpdateNotify(List<String> userToken) {
+        List<String> notifyAppUrlList = dcucAuthConfig.getNotifyAppUrlList();
+        for (String notifyAppUrl : notifyAppUrlList) {
+            sendNotify(notifyAppUrl, userToken);
+        }
+    }
+
+    @Retryable(value = RemoteAccessException.class,
+            maxAttempts = 5,
+            backoff = @Backoff(delay = 1000)
+    )
+    public void sendNotify(String notifyUrl, List<String> userTokenList) {
+        AuthNoticeReqVO authNoticeReqVO = new AuthNoticeReqVO();
+        authNoticeReqVO.setUserTokenId(userTokenList);
+
+        String postJson = JSONUtil.toJsonStr(authNoticeReqVO);
+        log.info("App permission notify URL:{}", notifyUrl);
+        log.info("App permission notify post content:{}", postJson);
+        String postResp;
+        try {
+            postResp = HttpRequest.post(notifyUrl)
+                    .header("Message-Type", "tokencheck")
+                    .header("Content-Type", "application/json")
+                    .body(postJson)
+                    .execute()
+                    .body();
+        } catch (Exception e) {
+            log.error("Post error", e);
+            throw new RemoteAccessException(e.getMessage());
+        }
+        ObjectMapper objectMapper = new ObjectMapper();
+
+        try {
+            AuthNoticeRespVO authNoticeRespVO = objectMapper.readValue(postResp, AuthNoticeRespVO.class);
+            String statusCode = authNoticeRespVO.getStatusCode();
+            if (!"0000".equals(statusCode)) {
+                log.error("notify error:{}", authNoticeRespVO.getMessage());
+                throw new RemoteAccessException(authNoticeRespVO.getMessage());
+            }
+        } catch (JsonProcessingException e) {
+            log.error("parse json error", e);
+            throw new RemoteAccessException(e.getMessage());
+        }
+    }
+
+
     @Recover
     public void recover(RemoteAccessException e) {
         log.error("Remote error", e);

+ 8 - 1
dcuc-auth-service/src/main/java/com/dragoninfo/dcuc/auth/config/DcucAuthConfig.java

@@ -6,6 +6,8 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.stereotype.Component;
 
+import java.util.List;
+
 /**
  * @author fuzq
  * @date 2019/3/13
@@ -95,6 +97,11 @@ public class DcucAuthConfig {
     /**
      * 定时任务等系统默认操作人员身份证号
      */
-    private String operatorIdcard ;
+    private String operatorIdcard;
+
+    /**
+     * 新标准通知应用路径
+     */
+    private List<String> notifyAppUrlList;
 
 }