Browse Source

需求:为实现与BOSS权限认证系统对接所改造的内容

lijie 3 years ago
parent
commit
81cec04b0d
28 changed files with 671 additions and 83 deletions
  1. 13 0
      dmp-common/src/main/java/com/persagy/dmp/common/context/AppContext.java
  2. 2 0
      dmp-common/src/main/java/com/persagy/dmp/common/context/DefaultAppContext.java
  3. 8 1
      dmp-common/src/main/java/com/persagy/dmp/common/model/response/CommonResult.java
  4. 3 2
      dmp-common/src/main/java/com/persagy/dmp/common/utils/ResultHelper.java
  5. 32 0
      dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/client/AuthFacade.java
  6. 70 0
      dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/client/BossAuthClient.java
  7. 62 0
      dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/client/BossAuthFacade.java
  8. 50 0
      dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/client/BossAuthFallbackFactory.java
  9. 1 1
      dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/client/EmsSaasWebClient.java
  10. 32 0
      dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/client/EmsSaasWebFacade.java
  11. 14 7
      dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/client/PassAccountClient.java
  12. 40 0
      dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/client/PaasAccountFacade.java
  13. 34 0
      dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/client/PaasAccountFallbackFactory.java
  14. 0 23
      dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/client/PassAccountFallbackFactory.java
  15. 52 0
      dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/config/AuthFeignConfig.java
  16. 23 0
      dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/config/AuthFeignInterceptor.java
  17. 14 0
      dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/config/CommonWebConfigurer.java
  18. 24 0
      dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/constant/BossAssignedEnum.java
  19. 24 0
      dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/constant/DeviceTypeEnum.java
  20. 22 0
      dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/constant/LoginTypeEnum.java
  21. 45 0
      dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/domain/BossAuthMenu.java
  22. 26 0
      dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/domain/BossAuthPermission.java
  23. 32 0
      dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/domain/BossAuthUser.java
  24. 6 6
      dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/domain/Group.java
  25. 17 7
      dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/domain/Project.java
  26. 24 11
      dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/service/impl/AbstractAuthServiceImpl.java
  27. 1 22
      dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/service/impl/BossAuthServiceImpl.java
  28. 0 3
      dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/basic/config/DigitalFeignConfig.java

+ 13 - 0
dmp-common/src/main/java/com/persagy/dmp/common/context/AppContext.java

@@ -25,6 +25,8 @@ public abstract class AppContext implements Serializable {
     public static final String USER_ID = "userId";
     /** 项目ID */
     public static final String PROJECT_ID = "projectId";
+    /** 当前用户的token */
+    public static final String TOKEN = "token";
     /** 数据源 */
     public static final String DATA_SOURCE_NAME = "dataSourceName";
     /** 上下文数据来源,true-从url获取,false-从head获取 */
@@ -97,6 +99,12 @@ public abstract class AppContext implements Serializable {
      **/
     public abstract void setAppId(String appId);
     /**
+     * 设置当前用户token
+     * @param token 当前用户token
+     * @return void
+     **/
+    public abstract void setToken(String token);
+    /**
      * 获取用户ID
      * @return 用户ID
      **/
@@ -116,4 +124,9 @@ public abstract class AppContext implements Serializable {
      * @return 应用标识
      **/
     public abstract String getAppId();
+    /**
+     * 获取当前用户token
+     * @return 当前用户token
+     **/
+    public abstract String getToken();
 }

+ 2 - 0
dmp-common/src/main/java/com/persagy/dmp/common/context/DefaultAppContext.java

@@ -22,4 +22,6 @@ public class DefaultAppContext extends AppContext {
     private String projectId;
     /** 应用 */
     private String appId;
+    /** 当前用户token */
+    private String token;
 }

+ 8 - 1
dmp-common/src/main/java/com/persagy/dmp/common/model/response/CommonResult.java

@@ -1,5 +1,6 @@
 package com.persagy.dmp.common.model.response;
 
+import com.fasterxml.jackson.annotation.JsonAlias;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.persagy.dmp.common.constant.ResponseCode;
 import lombok.Data;
@@ -15,10 +16,16 @@ public class CommonResult<T> {
 
     /** 不需要提示 */
     public static final CommonResult SUCCESS = new CommonResult();
-
+    /**结果code,兼容respCode,code*/
+    @JsonAlias({"respCode","code"})
     private String result;
+    /**结果提示,兼容respMsg,msg*/
+    @JsonAlias({"respMsg","msg"})
     private String message;
+    /**数据结果,兼容content*/
+    @JsonAlias({"content"})
     private T data;
+    /**数量*/
     private Long count;
 
     /**

+ 3 - 2
dmp-common/src/main/java/com/persagy/dmp/common/utils/ResultHelper.java

@@ -4,6 +4,7 @@ package com.persagy.dmp.common.utils;
 import cn.hutool.core.collection.CollUtil;
 import com.persagy.dmp.common.exception.BusinessException;
 import com.persagy.dmp.common.model.response.CommonResult;
+import org.apache.poi.ss.formula.functions.T;
 
 import java.util.List;
 
@@ -42,7 +43,7 @@ public class ResultHelper {
      * @param respMsg
      * @return
      */
-    public static CommonResult<Void> failure(String respMsg) {
+    public static <T> CommonResult<T> failure(String respMsg) {
         return failure(FAIL, respMsg);
     }
 
@@ -52,7 +53,7 @@ public class ResultHelper {
      * @param respMsg
      * @return
      */
-    public static CommonResult<Void> failure(String respCode, String respMsg) {
+    public static <T> CommonResult<T> failure(String respCode, String respMsg) {
         return new CommonResult<>(respCode, respMsg);
     }
 

+ 32 - 0
dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/client/AuthFacade.java

@@ -0,0 +1,32 @@
+package com.persagy.dmp.auth.client;
+
+import cn.hutool.http.HttpStatus;
+import com.persagy.dmp.common.constant.ResponseCode;
+import com.persagy.dmp.common.model.response.CommonResult;
+/**
+ *  boss-auth的抽象门面类
+ * @author : lijie
+ * Update By 2022/1/11 15:26
+ */
+public abstract class AuthFacade {
+    /**
+     * 处理一下boss-auth的返回code
+     * @param commonResult : 查询结果
+     * return : void
+     * @author : lijie
+     * Update By 2022/1/11 15:06
+     */
+    public static <T> CommonResult<T> handleResultCode(CommonResult<T> commonResult) {
+        if (String.valueOf(HttpStatus.HTTP_OK).equals(commonResult.getResult())
+            || ResponseCode.A00000.getCode().equals(commonResult.getResult())){
+            commonResult.setResult(ResponseCode.A00000.getDesc());
+            return commonResult;
+        }
+        if (ResponseCode.A10000.getCode().equals(commonResult.getResult())){
+            commonResult.setResult(ResponseCode.A10000.getDesc());
+            return commonResult;
+        }
+        commonResult.setResult(ResponseCode.C0001.getCode());
+        return commonResult;
+    }
+}

+ 70 - 0
dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/client/BossAuthClient.java

@@ -0,0 +1,70 @@
+package com.persagy.dmp.auth.client;
+
+import com.persagy.dmp.auth.config.AuthFeignConfig;
+import com.persagy.dmp.auth.domain.BossAuthMenu;
+import com.persagy.dmp.auth.domain.BossAuthPermission;
+import com.persagy.dmp.auth.domain.BossAuthUser;
+import com.persagy.dmp.common.model.response.CommonResult;
+import feign.Headers;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.util.List;
+
+/**
+ * boss-auth服务
+ * @author : lijie
+ * Update By 2022/1/10 18:18
+ */
+@FeignClient(name = "boss-auth",fallbackFactory = BossAuthFallbackFactory.class,
+        url = "${boss.auth.service:}",path = "/auth",configuration = AuthFeignConfig.class)
+public interface BossAuthClient {
+
+    /**
+     * 查询登录账号个人信息(内部系统)
+     * @return : com.persagy.dmp.common.model.response.CommonResult<java.lang.String>
+     * @author : lijie
+     * Update By 2022/1/11 10:31
+     */
+    @GetMapping(value = "/login/inner/loginInfo")
+    @Headers({"Content-Type: application/x-www-form-urlencoded"})
+    CommonResult<BossAuthUser> loginInnerLoginInfo();
+
+    /**
+     * 查询登录账号个人信息(saas系统)
+     * @return : com.persagy.dmp.common.model.response.CommonResult<java.lang.String>
+     * @author : lijie
+     * Update By 2022/1/11 10:34
+     */
+    @GetMapping(value = "/login/outer/loginInfo")
+    @Headers({"Content-Type: application/x-www-form-urlencoded"})
+    CommonResult<BossAuthUser> loginOuterLoginInfo();
+
+    /**
+     * 查询登录账号菜单权限
+     * @param websiteId : 网站id
+     * @return : com.persagy.dmp.common.model.response.CommonResult<java.lang.String>  
+     * @author : lijie
+     * Update By 2022/1/11 10:30
+     */
+    @GetMapping(value = "/login/loginMenu/{websiteId}")
+    @Headers({"Content-Type: application/x-www-form-urlencoded"})
+    CommonResult<List<BossAuthMenu>> loginMenu(@PathVariable String websiteId);
+
+
+    /**
+     * 查询登录账号数据权限
+     * @param websiteId : 网站id
+     * @return : com.persagy.dmp.common.model.response.CommonResult<java.lang.String>  
+     * @author : lijie
+     * Update By 2022/1/11 10:33
+     */
+    @GetMapping(value = "/login/loginPermission/{websiteId}")
+    @Headers({"Content-Type: application/x-www-form-urlencoded"})
+    CommonResult<List<BossAuthPermission>> loginPermission(@PathVariable String websiteId);
+
+
+}

+ 62 - 0
dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/client/BossAuthFacade.java

@@ -0,0 +1,62 @@
+package com.persagy.dmp.auth.client;
+
+import cn.hutool.extra.spring.SpringUtil;
+import com.persagy.dmp.auth.domain.*;
+import com.persagy.dmp.common.model.response.CommonResult;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.List;
+
+/**
+ * boss-auth服务门面类
+ * @author : lijie
+ * Update By 2022/1/10 19:21
+ */
+@Slf4j
+public class BossAuthFacade extends AuthFacade{
+
+    private static BossAuthClient client = SpringUtil.getBean(BossAuthClient.class);
+
+    /**
+     * 查询登录账号个人信息(内部系统)
+     * @return : com.persagy.dmp.common.model.response.CommonResult<java.lang.String>
+     * @author : lijie
+     * Update By 2022/1/11 10:31
+     */
+    public static CommonResult<BossAuthUser> loginInnerLoginInfo(){
+        return handleResultCode(client.loginInnerLoginInfo());
+    }
+
+    /**
+     * 查询登录账号个人信息(saas系统)
+     * @return : com.persagy.dmp.common.model.response.CommonResult<java.lang.String>
+     * @author : lijie
+     * Update By 2022/1/11 10:34
+     */
+    public static CommonResult<BossAuthUser> loginOuterLoginInfo(){
+        return handleResultCode(client.loginOuterLoginInfo());
+    }
+
+    /**
+     * 查询登录账号菜单权限
+     * @param websiteId : 网站id
+     * @return : com.persagy.dmp.common.model.response.CommonResult<java.lang.String>
+     * @author : lijie
+     * Update By 2022/1/11 10:30
+     */
+    public static CommonResult<List<BossAuthMenu>> loginMenu(String websiteId){
+        return handleResultCode(client.loginMenu(websiteId));
+    }
+
+    /**
+     * 查询登录账号数据权限
+     * @param websiteId : 网站id
+     * @return : com.persagy.dmp.common.model.response.CommonResult<java.lang.String>
+     * @author : lijie
+     * Update By 2022/1/11 10:33
+     */
+    private static CommonResult<List<BossAuthPermission>> loginPermission(String websiteId){
+        return handleResultCode(client.loginPermission(websiteId));
+    }
+
+}

+ 50 - 0
dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/client/BossAuthFallbackFactory.java

@@ -0,0 +1,50 @@
+package com.persagy.dmp.auth.client;
+
+import com.persagy.dmp.auth.domain.BossAuthMenu;
+import com.persagy.dmp.auth.domain.BossAuthPermission;
+import com.persagy.dmp.auth.domain.BossAuthUser;
+import com.persagy.dmp.common.model.response.CommonResult;
+import com.persagy.dmp.common.utils.ResultHelper;
+import feign.hystrix.FallbackFactory;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.List;
+
+/**
+ * boss-auth应用
+ * @author : lijie
+ * Update By 2022/1/10 19:21
+ */
+@Slf4j
+public class BossAuthFallbackFactory implements FallbackFactory<BossAuthClient> {
+
+    /**
+     * 调用失败,返回
+     */
+    @Override
+    public BossAuthClient create(Throwable throwable) {
+        return new BossAuthClient(){
+
+            @Override
+            public CommonResult<BossAuthUser> loginInnerLoginInfo() {
+                return ResultHelper.failure("调用boss-auth失败:" + throwable.getMessage());
+            }
+
+            @Override
+            public CommonResult<BossAuthUser> loginOuterLoginInfo() {
+                return ResultHelper.failure("调用boss-auth失败:" + throwable.getMessage());
+            }
+
+            @Override
+            public CommonResult<List<BossAuthMenu>> loginMenu(String websiteId) {
+                return ResultHelper.failure("调用boss-auth失败:" + throwable.getMessage());
+            }
+
+            @Override
+            public CommonResult<List<BossAuthPermission>> loginPermission(String websiteId) {
+                return ResultHelper.failure("调用boss-auth失败:" + throwable.getMessage());
+            }
+        };
+    }
+
+}

+ 1 - 1
dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/client/EmsSaasWebClient.java

@@ -33,6 +33,6 @@ public interface EmsSaasWebClient {
 	 * Update By lijie 2021/11/8 14:12
 	 */
 	@PostMapping(value = "/rwd/groupAndSchema/admin/queryGroupProjectList")
-	ResultReturn<Group> queryGroupProjectList(@RequestBody JSONObject param);
+	ResultReturn<Group> queryGroupProjectList(@RequestBody Object param);
 	
 }

+ 32 - 0
dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/client/EmsSaasWebFacade.java

@@ -0,0 +1,32 @@
+package com.persagy.dmp.auth.client;
+
+import cn.hutool.extra.spring.SpringUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.persagy.dmp.auth.domain.Group;
+import com.persagy.dmp.auth.domain.ResultReturn;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+/**
+ * 运维系统门面类
+ * @author : lijie
+ * Update By 2022/1/11 11:50
+ */
+public class EmsSaasWebFacade {
+
+	private static EmsSaasWebClient client = SpringUtil.getBean(EmsSaasWebClient.class);
+
+	/***
+	 * Description: 查询集团项目列表
+	 * @param param : 请求参数
+	 * @return : java.util.List<com.alibaba.fastjson.JSONObject>
+	 * @author : lijie
+	 * @date :2021/11/8 14:12
+	 * Update By lijie 2021/11/8 14:12
+	 */
+	public static ResultReturn<Group> queryGroupProjectList(Object param){
+		return client.queryGroupProjectList(param);
+	}
+	
+}

+ 14 - 7
dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/client/PassAccountClient.java

@@ -1,8 +1,6 @@
 package com.persagy.dmp.auth.client;
 
-import com.alibaba.fastjson.JSONObject;
-import com.persagy.dmp.auth.domain.Group;
-import com.persagy.dmp.auth.domain.ResultReturn;
+import com.persagy.dmp.auth.config.AuthFeignConfig;
 import com.persagy.dmp.common.model.response.CommonResult;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -13,12 +11,12 @@ import org.springframework.web.bind.annotation.RequestBody;
  * @author : lijie
  * Update By 2022/1/10 18:18
  */
-@FeignClient(name = "paas-account",fallbackFactory = PassAccountFallbackFactory.class,
-        url = "${boss.paas.account.service:}",path = "/paas")
-public interface PassAccountClient {
+@FeignClient(name = "paas-account",fallbackFactory = PaasAccountFallbackFactory.class,
+        url = "${paas.account.service:}",path = "/paas",configuration = AuthFeignConfig.class)
+public interface PaasAccountClient {
 
     /**
-     * BOSS平台的登录接口
+     * PAAS平台的登录接口
      * @param param : 请求参数
      * @return : com.persagy.dmp.common.model.response.CommonResult<java.lang.String>
      * @author : lijie
@@ -26,6 +24,15 @@ public interface PassAccountClient {
      */
     @PostMapping(value = "/account/login")
     CommonResult<String> accountLogin(@RequestBody Object param);
+    /**
+     * PAAS平台的刷新token接口
+     * @param param : 请求参数
+     * @return : com.persagy.dmp.common.model.response.CommonResult<java.lang.String>
+     * @author : lijie
+     * Update By 2022/1/10 18:20
+     */
+    @PostMapping(value = "/account/token/refresh")
+    CommonResult<String> accountTokenRefresh(@RequestBody Object param);
 
 
 }

+ 40 - 0
dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/client/PaasAccountFacade.java

@@ -0,0 +1,40 @@
+package com.persagy.dmp.auth.client;
+
+import cn.hutool.extra.spring.SpringUtil;
+import com.persagy.dmp.common.model.response.CommonResult;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+/**
+ * paas-account服务门面类
+ * @author : lijie
+ * Update By 2022/1/10 18:18
+ */
+public class PaasAccountFacade extends AuthFacade {
+
+    private static PaasAccountClient client = SpringUtil.getBean(PaasAccountClient.class);
+
+    /**
+     * PAAS平台的登录接口
+     * @param param : 请求参数
+     * @return : com.persagy.dmp.common.model.response.CommonResult<java.lang.String>
+     * @author : lijie
+     * Update By 2022/1/10 18:20
+     */
+    public static CommonResult<String> accountLogin(Object param){
+        return handleResultCode(client.accountLogin(param));
+    }
+    /**
+     * PAAS平台的刷新token接口
+     * @param param : 请求参数
+     * @return : com.persagy.dmp.common.model.response.CommonResult<java.lang.String>
+     * @author : lijie
+     * Update By 2022/1/10 18:20
+     */
+    public static CommonResult<String> accountTokenRefresh(Object param){
+        return handleResultCode(client.accountTokenRefresh(param));
+    }
+
+
+}

+ 34 - 0
dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/client/PaasAccountFallbackFactory.java

@@ -0,0 +1,34 @@
+package com.persagy.dmp.auth.client;
+
+import com.persagy.dmp.common.model.response.CommonResult;
+import com.persagy.dmp.common.utils.ResultHelper;
+import feign.hystrix.FallbackFactory;
+import lombok.extern.slf4j.Slf4j;
+
+/**
+ * pass-account应用
+ * @author : lijie
+ * Update By 2022/1/10 19:21
+ */
+@Slf4j
+public class PaasAccountFallbackFactory implements FallbackFactory<PaasAccountClient> {
+
+    /**
+     * 调用失败,返回
+     */
+    @Override
+    public PaasAccountClient create(Throwable throwable) {
+        return new PaasAccountClient() {
+            @Override
+            public CommonResult<String> accountLogin(Object param) {
+                return ResultHelper.failure("调用pass-account失败:" + throwable.getMessage());
+            }
+
+            @Override
+            public CommonResult<String> accountTokenRefresh(Object param) {
+                return ResultHelper.failure("调用pass-account失败:" + throwable.getMessage());
+            }
+        };
+    }
+
+}

+ 0 - 23
dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/client/PassAccountFallbackFactory.java

@@ -1,23 +0,0 @@
-package com.persagy.dmp.auth.client;
-
-import com.persagy.dmp.auth.domain.Group;
-import com.persagy.dmp.auth.domain.ResultReturn;
-import com.persagy.dmp.common.constant.CommonConstant;
-import com.persagy.dmp.common.utils.ResultHelper;
-import feign.hystrix.FallbackFactory;
-import lombok.extern.slf4j.Slf4j;
-
-@Slf4j
-public class PassAccountFallbackFactory implements FallbackFactory<PassAccountClient> {
-
-    /**
-     * 调用失败,返回
-     */
-    @Override
-    public PassAccountClient create(Throwable throwable) {
-
-        //PassAccountClient accountClient = (PassAccountClient) param -> ResultHelper.failure("调用pass-account失败:" + throwable.getMessage());
-        return null;
-    }
-
-}

+ 52 - 0
dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/config/AuthFeignConfig.java

@@ -0,0 +1,52 @@
+package com.persagy.dmp.auth.config;
+
+import feign.Logger;
+import feign.RequestInterceptor;
+import feign.codec.Encoder;
+import feign.form.spring.SpringFormEncoder;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.ObjectFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.cloud.openfeign.support.SpringEncoder;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+import org.springframework.context.annotation.Scope;
+
+import static org.springframework.beans.factory.config.BeanDefinition.SCOPE_PROTOTYPE;
+
+/**
+ * 鉴权的Feign配置类
+ * @author : lijie
+ * Update By 2022/1/11 14:58
+ */
+@EnableFeignClients(basePackages="com.persagy.dmp.auth.**.client")
+@Configuration
+@RequiredArgsConstructor
+public class AuthFeignConfig {
+
+    private final ObjectFactory<HttpMessageConverters> messageConverters;
+
+    @Bean
+    @Primary
+    @Scope(SCOPE_PROTOTYPE)
+    Encoder feignFormEncoder() {
+        return new SpringFormEncoder(new SpringEncoder(this.messageConverters));
+    }
+
+    @Bean
+    Logger.Level feignLevel(){
+        return Logger.Level.FULL;
+    }
+
+    @Bean
+    @ConditionalOnMissingBean({AuthFeignInterceptor.class})
+    @ConditionalOnProperty(value = "persagy.common.auth.channel", havingValue = "2")
+    RequestInterceptor authFeignInterceptor(){
+        return new AuthFeignInterceptor();
+    }
+}

+ 23 - 0
dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/config/AuthFeignInterceptor.java

@@ -0,0 +1,23 @@
+package com.persagy.dmp.auth.config;
+
+import com.persagy.dmp.common.context.AppContext;
+import feign.RequestInterceptor;
+import feign.RequestTemplate;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * 鉴权组件的Feign调用拦截器
+ * @author : lijie
+ * Update By 2022/1/11 14:47
+ */
+@Configuration
+@Slf4j
+public class AuthFeignInterceptor implements RequestInterceptor {
+
+    @Override
+    public void apply(RequestTemplate template) {
+        // 添加token
+        template.header("token", AppContext.getContext().getProjectId());
+    }
+}

+ 14 - 0
dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/config/CommonWebConfigurer.java

@@ -1,6 +1,8 @@
 package com.persagy.dmp.auth.config;
 
+import com.persagy.dmp.auth.client.BossAuthFallbackFactory;
 import com.persagy.dmp.auth.client.EmsSaasWebFallbackFactory;
+import com.persagy.dmp.auth.client.PaasAccountFallbackFactory;
 import com.persagy.dmp.auth.handler.AppContextHandler;
 import com.persagy.dmp.auth.service.AuthService;
 import com.persagy.dmp.auth.service.impl.BossAuthServiceImpl;
@@ -59,4 +61,16 @@ public class CommonWebConfigurer implements WebMvcConfigurer {
         return new BossAuthServiceImpl();
     }
 
+    @Bean
+    @ConditionalOnProperty(value = "persagy.common.auth.channel", havingValue = "2")
+    public BossAuthFallbackFactory bossAuthFallbackFactory(){
+        return new BossAuthFallbackFactory();
+    }
+
+    @Bean
+    @ConditionalOnProperty(value = "persagy.common.auth.channel", havingValue = "2")
+    public PaasAccountFallbackFactory paasAccountFallbackFactory(){
+        return new PaasAccountFallbackFactory();
+    }
+
 }

+ 24 - 0
dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/constant/BossAssignedEnum.java

@@ -0,0 +1,24 @@
+package com.persagy.dmp.auth.constant;
+
+import lombok.Getter;
+
+/**
+ * boss-auth应用的分配状态
+ * @author : lijie
+ * Update By 2022/1/11 12:03
+ */
+@Getter
+public enum BossAssignedEnum {
+    /** 未分配 */
+    ZERO("0", "未分配"),
+    /** 已分配 */
+    ONE("1", "已分配");
+
+    private String index;
+    private String name;
+
+    BossAssignedEnum(String index, String name) {
+        this.index = index;
+        this.name = name;
+    }
+}

+ 24 - 0
dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/constant/DeviceTypeEnum.java

@@ -0,0 +1,24 @@
+package com.persagy.dmp.auth.constant;
+
+import lombok.Getter;
+
+/***
+ * 登录设备类型
+ * @author : lijie
+ * Update By 2022/1/7 21:50
+ */
+@Getter
+public enum DeviceTypeEnum {
+    /**pc*/
+    ONE("1"),
+    /**Android*/
+    TWO("2"),
+    /**ios*/
+    THREE("3"),
+    /**其他*/
+    FOUR("4");
+    private String type;
+    DeviceTypeEnum(String type){
+        this.type=type;
+    };
+}

+ 22 - 0
dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/constant/LoginTypeEnum.java

@@ -0,0 +1,22 @@
+package com.persagy.dmp.auth.constant;
+
+import lombok.Getter;
+
+/***
+ * 登录方式
+ * @author : lijie
+ * Update By 2022/1/7 21:50
+ */
+@Getter
+public enum LoginTypeEnum {
+    /**用户名密码方式(默认是ldap用户)*/
+    ONE("1"),
+    /**使用手机号登录*/
+    TWO("2"),
+    /**钉钉扫码登录*/
+    THREE("3");
+    private String type;
+    LoginTypeEnum(String type){
+        this.type=type;
+    };
+}

+ 45 - 0
dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/domain/BossAuthMenu.java

@@ -0,0 +1,45 @@
+package com.persagy.dmp.auth.domain;
+
+import com.persagy.dmp.auth.constant.BossAssignedEnum;
+import com.persagy.dmp.auth.constant.BossMenuTypeEnum;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * boss-auth应用的菜单实体
+ * @author : lijie
+ * Update By 2022/1/11 12:03
+ */
+@Data
+public class BossAuthMenu {
+     /**目录/菜单/按钮的id*/
+     private String id;
+     /**目录/菜单/按钮的code*/
+     private String code;
+     /**目录/菜单/按钮的名称*/
+     private String name;
+    /**
+     * 菜单类型
+     * @see BossMenuTypeEnum#index
+     */
+     private String type;
+     /**排序序号*/
+     private String sort;
+     /**父级id*/
+     private String parId;
+     /**跳转路径*/
+     private String path;
+     /**
+      * 是否分配
+      * @see BossAssignedEnum#index
+      * */
+     private String assigned;
+     /**目录/菜单的子目录/菜单列表*/
+     private List<BossAuthMenu> children;
+     /**目录/菜单的子按钮列表*/
+     private List<BossAuthMenu> funcChildren;
+
+
+
+}

+ 26 - 0
dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/domain/BossAuthPermission.java

@@ -0,0 +1,26 @@
+package com.persagy.dmp.auth.domain;
+
+import lombok.Data;
+/**
+ * boss-auth应用的数据权限实体类
+ * @author : lijie
+ * Update By 2022/1/11 14:10
+ */
+@Data
+public class BossAuthPermission {
+    /**权限id*/
+    private String id;
+    /**权限编码*/
+    private String code;
+    /**权限名称*/
+    private String name;
+    /**权限描述*/
+    private String describes;
+    /**权限上级id*/
+    private String parId;
+    /**
+     * 是否分配
+     * @see com.persagy.dmp.auth.constant.BossAssignedEnum#index
+     * */
+    private String assigned;
+}

+ 32 - 0
dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/domain/BossAuthUser.java

@@ -0,0 +1,32 @@
+package com.persagy.dmp.auth.domain;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * boss-auth应用个人信息实体类
+ * @author : lijie
+ * Update By 2022/1/11 11:58
+ */
+@Data
+public class BossAuthUser {
+    /**人员id*/
+    private String id;
+    /**账号名称*/
+    private String account;
+    /**人员名称*/
+    private String name;
+    /**部门id*/
+    private String deptId;
+    /**邮箱地址*/
+    private String email;
+    /**手机号*/
+    private String phone;
+    /**菜单权限*/
+    private List<BossAuthMenu> menus;
+    /**数据权限*/
+    private List<BossAuthPermission> permissions;
+    /**项目权限*/
+    private List<Project> projects;
+}

+ 6 - 6
dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/domain/Group.java

@@ -8,10 +8,12 @@ import lombok.EqualsAndHashCode;
 import lombok.ToString;
 
 import java.util.List;
-
+/**
+ * 集团实体类
+ * @author : lijie
+ * Update By 2022/1/11 14:21
+ */
 @Data
-@ToString
-@EqualsAndHashCode
 public class Group {
     @JSONField(name = "groupCode",alternateNames = {"GroupCode","groupCode"})
     @JsonAlias({"GroupCode","groupCode"})
@@ -21,9 +23,7 @@ public class Group {
     @JsonAlias({"GroupName","groupName"})
     @JsonProperty("groupName")
     private String groupName;
-    @JSONField(name = "projects",alternateNames = {"Projects","projects"})
+    @JSONField(alternateNames = {"Projects","projects"})
     @JsonAlias({"Projects","projects"})
-    @JsonProperty("projects")
     private List<Project> projects;
-
 }

+ 17 - 7
dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/domain/Project.java

@@ -6,17 +6,27 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.ToString;
-
+/**
+ * 项目的实体类
+ * @author : lijie
+ * Update By 2022/1/11 14:19
+ */
 @Data
-@ToString
-@EqualsAndHashCode
 public class Project {
-    @JSONField(name = "projectId",alternateNames = {"ProjectId","projectId"})
+    /**项目id*/
+    @JSONField(alternateNames = {"ProjectId","projectId"})
     @JsonAlias({"ProjectId","projectId"})
-    @JsonProperty("projectId")
     private String projectId;
-    @JSONField(name = "projectName",alternateNames = {"ProjectName","projectName"})
+    /**项目名称*/
+    @JSONField(alternateNames = {"ProjectName","projectName"})
     @JsonAlias({"ProjectName","projectName"})
-    @JsonProperty("projectName")
     private String projectName;
+    /**集团编码*/
+    @JSONField(alternateNames = {"GroupCode","groupCode"})
+    @JsonAlias({"GroupCode","groupCode"})
+    private String groupCode;
+    /**集团名称*/
+    @JSONField(alternateNames = {"GroupName","groupName"})
+    @JsonAlias({"GroupName","groupName"})
+    private String groupName;
 }

+ 24 - 11
dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/service/impl/AbstractAuthServiceImpl.java

@@ -16,6 +16,8 @@ import javax.servlet.http.HttpServletResponse;
  */
 public abstract class AbstractAuthServiceImpl implements AuthService {
 
+    private static final String MIDDLEWARE_GROUP_CODE="middleware.group.code";
+
     @Override
     public boolean validateLogin(HttpServletRequest request, HttpServletResponse response) {
         // 登录认证通常在网关完成,无网关服务在此完成
@@ -44,26 +46,37 @@ public abstract class AbstractAuthServiceImpl implements AuthService {
      */
     protected void loadContextByRequest(HttpServletRequest request) {
         AppContext context = AppContext.getContext();
+        // 1.默认从url中获取
         if (SpringHelper.getBoolean(AppContext.PERSAGY_COMMON_AUTH_CONTEXT_SOURCE,true)){
             context.setGroupCode(request.getParameter(AppContext.GROUP_CODE));
             context.setProjectId(request.getParameter(AppContext.PROJECT_ID));
             context.setAppId(request.getParameter(AppContext.APP_ID));
             context.setAccountId(request.getParameter(AppContext.USER_ID));
-        }else {
+        }
+        context.setToken(request.getHeader(AppContext.TOKEN));
+        // 2.以下为补偿措施
+        // 2.1 处理集团编码
+        if(StrUtil.isBlank(context.getGroupCode())
+                && StrUtil.isNotBlank(request.getHeader(AppContext.GROUP_CODE))) {
             context.setGroupCode(request.getHeader(AppContext.GROUP_CODE));
+        }
+        if(StrUtil.isBlank(context.getGroupCode())) {
+            context.setGroupCode(SpringHelper.getString(MIDDLEWARE_GROUP_CODE));
+        }
+        // 2.2 处理项目id
+        if(StrUtil.isBlank(context.getProjectId())
+                && StrUtil.isNotBlank(request.getHeader(AppContext.PROJECT_ID))) {
             context.setProjectId(request.getHeader(AppContext.PROJECT_ID));
+        }
+        // 2.3 处理appId
+        if(StrUtil.isBlank(context.getAppId())
+                && StrUtil.isNotBlank(request.getHeader(AppContext.APP_ID))) {
             context.setAppId(request.getHeader(AppContext.APP_ID));
+        }
+        // 2.4 处理账号id
+        if(StrUtil.isBlank(context.getAccountId())
+                && StrUtil.isNotBlank(request.getHeader(AppContext.USER_ID))) {
             context.setAccountId(request.getHeader(AppContext.USER_ID));
-            // 无集团编码时,默认为配置的集团编码
-            String groupCode = request.getHeader(AppContext.GROUP_CODE);
-            if(StrUtil.isBlank(groupCode)) {
-                context.setGroupCode(SpringHelper.getString("middleware.group.code"));
-            }
-            // 无项目id时,尝试从请求URL中获取
-            if (StrUtil.isBlank(request.getHeader(AppContext.PROJECT_ID))
-                    && StrUtil.isNotBlank(request.getParameter(CommonConstant.QUERY_PROJECTID))){
-                context.setProjectId(request.getParameter(CommonConstant.QUERY_PROJECTID));
-            }
         }
         // 无用户时,默认为默认系统用户
         if(StrUtil.isBlank(context.getAccountId())) {

+ 1 - 22
dmp-comp/dmp-auth-starter/src/main/java/com/persagy/dmp/auth/service/impl/BossAuthServiceImpl.java

@@ -32,27 +32,6 @@ public class BossAuthServiceImpl extends AbstractAuthServiceImpl{
 
     @Override
     public void loginSuccess(HttpServletRequest request, HttpServletResponse response) {
-        // 解析token对象
-        JSONObject info = getTokenInfo(request.getHeader("token"));
-        // 回写上下文
-        AppContext.getContext().setGroupCode(info.getString(AppContext.GROUP_CODE));
-        AppContext.getContext().setProjectId(info.getString(AppContext.PROJECT_ID));
-        AppContext.getContext().setAppId(info.getString(AppContext.APP_ID));
-        AppContext.getContext().setAccountId(info.getString(AppContext.ACCOUNT_ID));
-    }
-
-    /**
-     * 解析token对象
-     * @param token
-     * @return
-     */
-    private JSONObject getTokenInfo(String token) {
-        // 获取配置密钥
-        String accessKey = SpringHelper.getString("persagy.common.token.key", "63499E35378AE1B0733E3FED7F780B68");
-        String accessSecret = SpringHelper.getString("persagy.common.token.secret", "C0E7BD39B52A15C7");
-        // 解析token
-        AES aes = new AES("CBC","PKCS7Padding", accessKey.getBytes(), accessSecret.getBytes());
-        String tokenObj = aes.decryptStr(token);
-        return JSONObject.parseObject(tokenObj);
+        loadContextByRequest(request);
     }
 }

+ 0 - 3
dmp-comp/dmp-digital-starter/src/main/java/com/persagy/dmp/basic/config/DigitalFeignConfig.java

@@ -7,10 +7,7 @@ import feign.form.spring.SpringFormEncoder;
 import org.springframework.beans.factory.ObjectFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;
 import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.cloud.openfeign.EnableFeignClients;
 import org.springframework.cloud.openfeign.support.SpringEncoder;
 import org.springframework.context.annotation.Bean;