From c5cd32decb730acf966c051f5306a214fa537d91 Mon Sep 17 00:00:00 2001 From: TanJ Date: Tue, 21 Mar 2023 11:03:16 +0800 Subject: [PATCH 01/11] =?UTF-8?q?SystemAndDeviceInfo=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=20loginDevice?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../axzo/framework/auth/domain/SystemAndDeviceInfo.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/SystemAndDeviceInfo.java b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/SystemAndDeviceInfo.java index cfcb785..7756ba9 100644 --- a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/SystemAndDeviceInfo.java +++ b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/SystemAndDeviceInfo.java @@ -14,8 +14,15 @@ public class SystemAndDeviceInfo { private String deviceKind; private String deviceNo; - + private String appVersion; private String ipAddress; + + /** + * 登录的设备,其实是端。模糊了具体的业务类型 + * {@link TerminalInfo#NT_CM_APP_CM_LEADER} 和 {@link TerminalInfo#NT_CM_APP_CM_WORKER} + * 会转换为 {@link TerminalInfo#NT_CM_APP_GENERAL} + */ + private String loginDevice; } From 859d6225fec0718d52e97956b4417737df68c6df Mon Sep 17 00:00:00 2001 From: TanJ Date: Tue, 21 Mar 2023 14:48:59 +0800 Subject: [PATCH 02/11] =?UTF-8?q?terminalInfo=E6=B7=BB=E5=8A=A0=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=E8=8E=B7=E5=8F=96=E6=A8=A1=E7=B3=8A=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E7=9A=84=E7=AB=AF=E6=A0=87=E8=AF=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../framework/auth/domain/TerminalInfo.java | 40 +++++++++++++++++++ .../service/ContextInfoBuilderAspect.java | 1 + 2 files changed, 41 insertions(+) diff --git a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/TerminalInfo.java b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/TerminalInfo.java index 6451962..0b7e037 100644 --- a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/TerminalInfo.java +++ b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/TerminalInfo.java @@ -8,6 +8,8 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; + +import jdk.nashorn.internal.ir.Terminal; import org.springframework.util.StringUtils; @@ -607,6 +609,44 @@ public class TerminalInfo { } return null; } + //只要端的标识,不需要分的更加的细 + public String getSimpleTerminal() { + String terminalKey = ""; + //产业工人app + if (this.isCM()) { + terminalKey = TerminalInfo.NT_CM_APP_GENERAL; + } + //从业人员app + else if (this.isCMP()) { + terminalKey = TerminalInfo.NT_CMP_APP_GENERAL; + } + //cms + else if (this.isCMS()) { + terminalKey = TerminalInfo.NT_CMS_WEB_GENERAL; + } + //oms + else if (this.isOMS_WEB()) { + terminalKey = TerminalInfo.NT_OMS_WEB; + } + //大屏 + else if (this.isSCREEN()) { + terminalKey = TerminalInfo.NT_SCREEN; + } + //智能面板 + else if (this.isPANEL()) { + terminalKey = TerminalInfo.NT_PANEL; + } //招标 + else if (this.isBID_WEB_ENT()) { + terminalKey = TerminalInfo.NT_BID_WEB_ENT; + } + //投标 + else if (this.isBID_WEB_LEADER()) { + terminalKey = TerminalInfo.NT_BID_WEB_LEADER; + } else { + terminalKey = this.NT(); + } + return terminalKey; + } public static void main(String[] args) { TerminalInfo tm = new TerminalInfo("proj"); diff --git a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/service/ContextInfoBuilderAspect.java b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/service/ContextInfoBuilderAspect.java index 40de9b8..6f5cbf1 100644 --- a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/service/ContextInfoBuilderAspect.java +++ b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/service/ContextInfoBuilderAspect.java @@ -295,6 +295,7 @@ public class ContextInfoBuilderAspect { BeanUtil.fillBeanWithMap(userinfoMap, userInfo, false); contextInfo.setUserInfo(userInfo); + contextInfo.getSystemAndDeviceInfo().setLoginDevice(contextInfo.getTerminalInfo().getSimpleTerminal()); try { if(userinfoMap.containsKey("ouType")) contextInfo.setOuType(Integer.parseInt(userinfoMap.get("ouType").toString())); From 21ae1ab97f475c2e64798c00d8a650aaf69c691d Mon Sep 17 00:00:00 2001 From: TanJ Date: Tue, 21 Mar 2023 14:56:22 +0800 Subject: [PATCH 03/11] =?UTF-8?q?setLoginDevice=E9=80=BB=E8=BE=91=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../axzo/framework/auth/service/ContextInfoBuilderAspect.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/service/ContextInfoBuilderAspect.java b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/service/ContextInfoBuilderAspect.java index 6f5cbf1..060ca55 100644 --- a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/service/ContextInfoBuilderAspect.java +++ b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/service/ContextInfoBuilderAspect.java @@ -295,7 +295,6 @@ public class ContextInfoBuilderAspect { BeanUtil.fillBeanWithMap(userinfoMap, userInfo, false); contextInfo.setUserInfo(userInfo); - contextInfo.getSystemAndDeviceInfo().setLoginDevice(contextInfo.getTerminalInfo().getSimpleTerminal()); try { if(userinfoMap.containsKey("ouType")) contextInfo.setOuType(Integer.parseInt(userinfoMap.get("ouType").toString())); @@ -310,6 +309,7 @@ public class ContextInfoBuilderAspect { try { fillLegacyGuess(contextInfo, userinfoMap); + contextInfo.getSystemAndDeviceInfo().setLoginDevice(contextInfo.getTerminalInfo().getSimpleTerminal()); } catch (Exception e) { log.warn("fill legacy guess error for user identityId=" + userInfo.getIdentityId(), e); } From 519f0c9e13e833833f0d3dd02c0f11887b6f89d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=AE=81?= Date: Tue, 21 Mar 2023 16:30:16 +0800 Subject: [PATCH 04/11] =?UTF-8?q?Add:=201.=E6=B7=BB=E5=8A=A0=E5=B0=8F?= =?UTF-8?q?=E7=A8=8B=E5=BA=8F=E7=AB=AF:NT=5FMP=5FWX=5FGENERAL=202.?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=AE=A4=E8=AF=81=E7=8A=B6=E6=80=81:VerifySt?= =?UTF-8?q?atusEnum?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../framework/auth/domain/TerminalInfo.java | 63 ++++++++++++------- .../axzo/framework/auth/domain/UserInfo.java | 36 ++++++----- .../auth/enums/VerifyStatusEnum.java | 43 +++++++++++++ .../axzo/framework/auth/enums/ViewEnum.java | 22 +++++++ 4 files changed, 126 insertions(+), 38 deletions(-) create mode 100644 axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/enums/VerifyStatusEnum.java create mode 100644 axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/enums/ViewEnum.java diff --git a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/TerminalInfo.java b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/TerminalInfo.java index 6451962..89cb01f 100644 --- a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/TerminalInfo.java +++ b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/TerminalInfo.java @@ -1,15 +1,11 @@ package cn.axzo.framework.auth.domain; import cn.hutool.core.collection.CollectionUtil; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; import org.springframework.util.StringUtils; +import java.util.*; +import java.util.Map.Entry; + /** * 安心筑的所有终端的类型定义。 @@ -132,19 +128,43 @@ public class TerminalInfo { @Deprecated public static final String STR_TERMINAL_PL_PREFIX = "pl-"; - private static Map aliasMap = new HashMap<>(); - private static Map> ntLegacyMap = new HashMap<>(); + private static final Map aliasMap = new HashMap<>(); + private static final Map> ntLegacyMap = new HashMap<>(); @Deprecated public static final String STR_TERMINAL_SCREEN = "screen"; - + /** + * MP_WX - 微信小程序。 + * 也不会有产品板块、Feature配置在这个类型的Terminal。 + * 这里只是登录、选择具体的工作台,这一类基础的功能。 + */ + public static final String NT_MP_WX_GENERAL = "NT_MP_WX_GENERAL"; + + static { + aliasMap.put(NT_MP_WX_GENERAL, NT_MP_WX_GENERAL); + } + + + /** + * 是否是小程序 + * + * @return + */ + public boolean isMP() { + if (!StringUtils.hasText(newTerminalString)) { + return false; + } + return newTerminalString.startsWith("NT_MP_"); + } + /** * CMS - Web 还没选择任何具体的工作台。 * 也不会有产品板块、Feature配置在这个类型的Terminal。 * 这里只是登录、选择具体的工作台,这一类基础的功能。 */ public static final String NT_CMS_WEB_GENERAL = "NT_CMS_WEB_GENERAL"; + static { aliasMap.put(NT_CMS_WEB_GENERAL, NT_CMS_WEB_GENERAL); aliasMap.put(STR_TERMINAL_CMS, NT_CMS_WEB_GENERAL); @@ -327,19 +347,19 @@ public class TerminalInfo { } } - private String rawTerminalString; + private final String rawTerminalString; - private String newTerminalString; + private final String newTerminalString; /** * 代表CMS的几个字符串,无法确切的指明一个NewTerminal */ @Deprecated - private boolean ambiguous; + private final boolean ambiguous; @Deprecated - private static Set ambiguousNames = new HashSet<>(); + private static final Set ambiguousNames = new HashSet<>(); static { ambiguousNames.add(STR_TERMINAL_CMS); ambiguousNames.add(NUM_TERMINAL_CMS); @@ -449,10 +469,7 @@ public class TerminalInfo { String legacyNT = aliasMap.get(legacyTerminalString); if (legacyNT == null) return false; - if (legacyNT.equals(this.newTerminalString)) { - return true; - } - return false; + return legacyNT.equals(this.newTerminalString); } @Deprecated @@ -611,35 +628,35 @@ public class TerminalInfo { public static void main(String[] args) { TerminalInfo tm = new TerminalInfo("proj"); System.out.println(tm.getRawTerminalString()); - System.out.println(tm.toString()); + System.out.println(tm); System.out.println(TerminalInfo.parseLegacyTerminal(tm.getRawTerminalString())); System.out.println(TerminalInfo.parseLegacyTerminalLegacyPerspective(tm.getRawTerminalString(), "proj", "ent")); System.out.println("--------"); tm = new TerminalInfo("cms"); System.out.println(tm.getRawTerminalString()); - System.out.println(tm.toString()); + System.out.println(tm); System.out.println(TerminalInfo.parseLegacyTerminal(tm.getRawTerminalString())); System.out.println(TerminalInfo.parseLegacyTerminalLegacyPerspective(tm.getRawTerminalString(), "proj", "ent")); System.out.println("--------"); tm = new TerminalInfo("ent"); System.out.println(tm.getRawTerminalString()); - System.out.println(tm.toString()); + System.out.println(tm); System.out.println(TerminalInfo.parseLegacyTerminal(tm.getRawTerminalString())); System.out.println(TerminalInfo.parseLegacyTerminalLegacyPerspective(tm.getRawTerminalString(), "proj", "ent")); System.out.println("--------"); tm = new TerminalInfo("cmp"); System.out.println(tm.getRawTerminalString()); - System.out.println(tm.toString()); + System.out.println(tm); System.out.println(TerminalInfo.parseLegacyTerminal(tm.getRawTerminalString())); System.out.println(TerminalInfo.parseLegacyTerminalLegacyPerspective(tm.getRawTerminalString(), "proj", "ent")); System.out.println("--------"); tm = new TerminalInfo(TerminalInfo.NT_CMS_WEB_PROJ); System.out.println(tm.getRawTerminalString()); - System.out.println(tm.toString()); + System.out.println(tm); System.out.println(TerminalInfo.parseLegacyTerminal(tm.getRawTerminalString())); System.out.println(TerminalInfo.parseLegacyTerminalLegacyPerspective(tm.getRawTerminalString(), "proj", "ent")); System.out.println("--------"); diff --git a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/UserInfo.java b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/UserInfo.java index 001d3f8..aaa9b5d 100644 --- a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/UserInfo.java +++ b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/UserInfo.java @@ -1,5 +1,6 @@ package cn.axzo.framework.auth.domain; +import cn.axzo.framework.auth.enums.VerifyStatusEnum; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -13,25 +14,30 @@ public class UserInfo { /** * 自然人ID,从原axzoId迁移过来的,每个自然人有一个ID,后续这里的ID会被治理,不会和原axzoId一一对应。 - */ - private Long personId; + */ + private Long personId; - /** - * 身份ID,以后大家最常用的ID,用于各种具体的业务场景。 - */ - private Long identityId; + /** + * 身份ID,以后大家最常用的ID,用于各种具体的业务场景。 + */ + private Long identityId; - private Integer identityType; + private Integer identityType; - /** - * 账号ID,从原axzoId迁移过来的,是用来登录、发消息、发手机短信等使用的账号。 - */ - private Long acntId; + /** + * 认证状态 + */ + private VerifyStatusEnum verifyStatus; - /** - * 手机号,是从账号表里取到的,用户登录、短信验证、消息推送都是这个phone - */ - private String phoneNumber; + /** + * 账号ID,从原axzoId迁移过来的,是用来登录、发消息、发手机短信等使用的账号。 + */ + private Long acntId; + + /** + * 手机号,是从账号表里取到的,用户登录、短信验证、消息推送都是这个phone + */ + private String phoneNumber; /** diff --git a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/enums/VerifyStatusEnum.java b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/enums/VerifyStatusEnum.java new file mode 100644 index 0000000..1defbee --- /dev/null +++ b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/enums/VerifyStatusEnum.java @@ -0,0 +1,43 @@ +package cn.axzo.framework.auth.enums; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +/** + * 项目名称:profiles + * 类 名 称:ProfileSourceType + * 类 描 述:TODO + * 创建时间:2022/5/9 21:59 + * 创 建 人:xuyaozuo + */ +@Getter +@RequiredArgsConstructor +public enum VerifyStatusEnum { + //状态 0 - 未激活, 1 - 已激活,2 - 禁用,3- 认证失败 + NOT_VERIFIED(0, "未认证"), + VERIFYING(1, "认证中"), + VERIFY_SUCCESS(2, "认证成功"), + VERIFY_FAILED(3, "认证失败"), + ; + private final Integer code; + private final String message; + + private static Map map; + + public static VerifyStatusEnum codeOf(Integer code) { + if (code == null) { + return null; + } + if (map == null) { + map = new HashMap<>(values().length); + } + map = Arrays.stream(values()).collect(Collectors.toMap(VerifyStatusEnum::getCode, Function.identity())); + return map.get(code); + } +} diff --git a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/enums/ViewEnum.java b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/enums/ViewEnum.java new file mode 100644 index 0000000..6accbbb --- /dev/null +++ b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/enums/ViewEnum.java @@ -0,0 +1,22 @@ +package cn.axzo.framework.auth.enums; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +/** + * 项目名称:profiles + * 类 名 称:ProfileSourceType + * 类 描 述:TODO + * 创建时间:2022/5/9 21:59 + * 创 建 人:xuyaozuo + */ +@Getter +@RequiredArgsConstructor +public enum ViewEnum { + WORKER("工人"), + TEAM_LEADER("班组长"), + TEAM_MANAGER("班组管理员"), + + ; + private final String message; +} From fed63c5607a8db8510f8c7d365fc25917fb63f00 Mon Sep 17 00:00:00 2001 From: TanJ Date: Wed, 29 Mar 2023 11:27:24 +0800 Subject: [PATCH 05/11] =?UTF-8?q?=E6=B7=BB=E5=8A=A0context=20info=20Handle?= =?UTF-8?q?r?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/annotation/PreBuildContext.java | 3 +++ .../contextvalidate/ContextInfoHandler.java | 12 ++++++++++++ .../domain/contextvalidate/VerifyContext.java | 18 ++++++++++++++++++ .../auth/service/ContextInfoBuilderAspect.java | 6 +++++- 4 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/contextvalidate/ContextInfoHandler.java create mode 100644 axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/contextvalidate/VerifyContext.java diff --git a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/annotation/PreBuildContext.java b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/annotation/PreBuildContext.java index 4f84552..41bad3f 100644 --- a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/annotation/PreBuildContext.java +++ b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/annotation/PreBuildContext.java @@ -7,10 +7,13 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import cn.axzo.framework.auth.domain.ContextInfo; +import cn.axzo.framework.auth.domain.contextvalidate.ContextInfoHandler; @Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface PreBuildContext { Class value() default ContextInfo.class; + + Class[] filter() default {}; } diff --git a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/contextvalidate/ContextInfoHandler.java b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/contextvalidate/ContextInfoHandler.java new file mode 100644 index 0000000..41b7f23 --- /dev/null +++ b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/contextvalidate/ContextInfoHandler.java @@ -0,0 +1,12 @@ +package cn.axzo.framework.auth.domain.contextvalidate; + +import cn.axzo.framework.auth.domain.ContextInfo; + +/** + * @author tanjie@axzo.cn + * @date 2023/3/29 10:59 + */ +public interface ContextInfoHandler { + + void handler(ContextInfo contextInfo); +} diff --git a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/contextvalidate/VerifyContext.java b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/contextvalidate/VerifyContext.java new file mode 100644 index 0000000..7ee3910 --- /dev/null +++ b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/contextvalidate/VerifyContext.java @@ -0,0 +1,18 @@ +package cn.axzo.framework.auth.domain.contextvalidate; + +import cn.axzo.framework.auth.AuthException; +import cn.axzo.framework.auth.domain.ContextInfo; + +/** + * @author tanjie@axzo.cn + * @date 2023/3/29 11:12 + */ +public class VerifyContext implements ContextInfoHandler{ + @Override + public void handler(ContextInfo contextInfo) { + Integer verifiedStatus = contextInfo.getUserInfo().getVerifiedStatus(); + if (2 != verifiedStatus) { + throw new AuthException("该功能需要实名认证之后才可使用"); + } + } +} diff --git a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/service/ContextInfoBuilderAspect.java b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/service/ContextInfoBuilderAspect.java index 40de9b8..253ed58 100644 --- a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/service/ContextInfoBuilderAspect.java +++ b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/service/ContextInfoBuilderAspect.java @@ -11,6 +11,7 @@ import cn.axzo.framework.auth.domain.SystemAndDeviceInfo; import cn.axzo.framework.auth.domain.TerminalInfo; import cn.axzo.framework.auth.domain.UserInfo; import cn.axzo.framework.auth.domain.UserInfoMap; +import cn.axzo.framework.auth.domain.contextvalidate.ContextInfoHandler; import cn.axzo.framework.auth.enums.EnvEnum; import cn.azxo.framework.common.logger.logback.PodNamespacePropertyDefiner; import cn.hutool.core.bean.BeanUtil; @@ -124,7 +125,10 @@ public class ContextInfoBuilderAspect { // 定制一些信息的处理 contextInfo.buildCustomInfo(httpRequest, contextInfo.getUserInfoMap()); - + //针对contextInfo拦截。或修改参数等 + for (Class filter : preBuildContext.filter()) { + filter.newInstance().handler(contextInfo); + } // 把ContextInfo放到ThreadLocal中 ContextInfoHolder.set(contextInfo); Object[] args = parseContextInfoAndReturnArgs(httpRequest, pjp, contextInfo); From 1d01a34cdf842229b36a6b90773992cfe840897b Mon Sep 17 00:00:00 2001 From: TanJ Date: Thu, 30 Mar 2023 14:47:29 +0800 Subject: [PATCH 06/11] =?UTF-8?q?Context=20info=E6=B7=BB=E5=8A=A0=E4=B8=A4?= =?UTF-8?q?=E4=B8=AA=E9=BB=98=E8=AE=A4=E7=9A=84=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/annotation/PreBuildContext.java | 4 +++ .../contextvalidate/ContextInfoHandler.java | 13 +++++++- .../domain/contextvalidate/NonWorkspace.java | 31 +++++++++++++++++++ .../contextvalidate/ValidateVerify.java | 25 +++++++++++++++ .../domain/contextvalidate/VerifyContext.java | 18 ----------- .../service/ContextInfoBuilderAspect.java | 5 ++- 6 files changed, 76 insertions(+), 20 deletions(-) create mode 100644 axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/contextvalidate/NonWorkspace.java create mode 100644 axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/contextvalidate/ValidateVerify.java delete mode 100644 axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/contextvalidate/VerifyContext.java diff --git a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/annotation/PreBuildContext.java b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/annotation/PreBuildContext.java index 41bad3f..fb8ff14 100644 --- a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/annotation/PreBuildContext.java +++ b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/annotation/PreBuildContext.java @@ -15,5 +15,9 @@ import cn.axzo.framework.auth.domain.contextvalidate.ContextInfoHandler; public @interface PreBuildContext { Class value() default ContextInfo.class; + /** + * 针对ContextInfo进行一些定制化处理,会按传入的顺序执行 + * @return + */ Class[] filter() default {}; } diff --git a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/contextvalidate/ContextInfoHandler.java b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/contextvalidate/ContextInfoHandler.java index 41b7f23..38311ee 100644 --- a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/contextvalidate/ContextInfoHandler.java +++ b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/contextvalidate/ContextInfoHandler.java @@ -8,5 +8,16 @@ import cn.axzo.framework.auth.domain.ContextInfo; */ public interface ContextInfoHandler { - void handler(ContextInfo contextInfo); + /** + * + * @param contextInfo + * @return + * + * ***一般来说返回null就行, 若返回了非null.则会阻断业务代码运行,直接返回对应的参数给到前端 *** + *
+ * ***谨慎返回*** + * + *
+ */ + Object handler(ContextInfo contextInfo); } diff --git a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/contextvalidate/NonWorkspace.java b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/contextvalidate/NonWorkspace.java new file mode 100644 index 0000000..bccf18c --- /dev/null +++ b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/contextvalidate/NonWorkspace.java @@ -0,0 +1,31 @@ +package cn.axzo.framework.auth.domain.contextvalidate; + +import cn.axzo.framework.auth.domain.ContextInfo; +import cn.azxo.framework.common.model.CommonResponse; + +import java.lang.reflect.InvocationTargetException; + +/** + * 某些接口必须要这两个参数,校验这两个参数只要有一个字段为0或者null,则不执行业务逻辑 + * @author tanjie@axzo.cn + * @date 2023/3/29 11:33 + */ +public class NonWorkspace implements ContextInfoHandler{ + @Override + public Object handler(ContextInfo contextInfo) { + if (null != contextInfo + && (isZero(contextInfo.getOuId()) || isZero(contextInfo.getWorkspaceId()) )) { + return CommonResponse.success(); + } + return null; + } + + private boolean isZero(Long number) { + if(number == null) + return true; + if(number == 0L) + return true; + return false; + } + +} diff --git a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/contextvalidate/ValidateVerify.java b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/contextvalidate/ValidateVerify.java new file mode 100644 index 0000000..0881b1e --- /dev/null +++ b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/contextvalidate/ValidateVerify.java @@ -0,0 +1,25 @@ +package cn.axzo.framework.auth.domain.contextvalidate; + +import cn.axzo.framework.auth.AuthException; +import cn.axzo.framework.auth.domain.ContextInfo; +import cn.axzo.framework.auth.domain.UserInfo; +import cn.axzo.framework.auth.enums.VerifyStatusEnum; +import cn.hutool.core.lang.Assert; + +/** + * 实名校验 + * @author tanjie@axzo.cn + * @date 2023/3/29 11:12 + */ +public class ValidateVerify implements ContextInfoHandler{ + @Override + public Object handler(ContextInfo contextInfo) { + Assert.isTrue((null != contextInfo && null != contextInfo.getUserInfo() )&& VerifyStatusEnum.VERIFY_SUCCESS.equals(contextInfo.getUserInfo().getVerifyStatus()) + , () -> new AuthException("该功能需要实名认证之后才可使用") + ); + + return null; + } + + +} diff --git a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/contextvalidate/VerifyContext.java b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/contextvalidate/VerifyContext.java deleted file mode 100644 index 7ee3910..0000000 --- a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/contextvalidate/VerifyContext.java +++ /dev/null @@ -1,18 +0,0 @@ -package cn.axzo.framework.auth.domain.contextvalidate; - -import cn.axzo.framework.auth.AuthException; -import cn.axzo.framework.auth.domain.ContextInfo; - -/** - * @author tanjie@axzo.cn - * @date 2023/3/29 11:12 - */ -public class VerifyContext implements ContextInfoHandler{ - @Override - public void handler(ContextInfo contextInfo) { - Integer verifiedStatus = contextInfo.getUserInfo().getVerifiedStatus(); - if (2 != verifiedStatus) { - throw new AuthException("该功能需要实名认证之后才可使用"); - } - } -} diff --git a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/service/ContextInfoBuilderAspect.java b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/service/ContextInfoBuilderAspect.java index 253ed58..6da5405 100644 --- a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/service/ContextInfoBuilderAspect.java +++ b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/service/ContextInfoBuilderAspect.java @@ -127,7 +127,10 @@ public class ContextInfoBuilderAspect { contextInfo.buildCustomInfo(httpRequest, contextInfo.getUserInfoMap()); //针对contextInfo拦截。或修改参数等 for (Class filter : preBuildContext.filter()) { - filter.newInstance().handler(contextInfo); + Object handler = filter.newInstance().handler(contextInfo); + if (null != handler) { + return handler; + } } // 把ContextInfo放到ThreadLocal中 ContextInfoHolder.set(contextInfo); From 5eb70593cf136938c739f0a1881e97e84c06f54a Mon Sep 17 00:00:00 2001 From: TanJ Date: Thu, 30 Mar 2023 15:12:07 +0800 Subject: [PATCH 07/11] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=BE=AE=E4=BF=A1?= =?UTF-8?q?=E5=B0=8F=E7=A8=8B=E5=BA=8F=E7=AB=AF=E7=9A=84simple=20Terminal?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/axzo/framework/auth/domain/TerminalInfo.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/TerminalInfo.java b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/TerminalInfo.java index 1d8c61f..63c6162 100644 --- a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/TerminalInfo.java +++ b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/TerminalInfo.java @@ -666,7 +666,11 @@ public class TerminalInfo { //投标 else if (this.isBID_WEB_LEADER()) { terminalKey = TerminalInfo.NT_BID_WEB_LEADER; - } else { + } + else if (this.isMP()) { + terminalKey = TerminalInfo.NT_MP_WX_GENERAL; + } + else { terminalKey = this.NT(); } return terminalKey; From 3d94c75e4ea5b81c92eb880e5278b42c53b98cd0 Mon Sep 17 00:00:00 2001 From: TanJ Date: Thu, 6 Apr 2023 15:15:44 +0800 Subject: [PATCH 08/11] =?UTF-8?q?cm&5=20=E6=98=A0=E5=B0=84=E4=B8=BACP=5FGE?= =?UTF-8?q?NERAL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/axzo/framework/auth/domain/TerminalInfo.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/TerminalInfo.java b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/TerminalInfo.java index 63c6162..63b9f14 100644 --- a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/TerminalInfo.java +++ b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/TerminalInfo.java @@ -246,6 +246,8 @@ public class TerminalInfo { public static final String NT_CM_APP_GENERAL = "NT_CM_APP_GENERAL"; static { aliasMap.put(NT_CM_APP_GENERAL, NT_CM_APP_GENERAL); + aliasMap.put(STR_TERMINAL_CM, NT_CM_APP_GENERAL); + aliasMap.put(NUM_TERMINAL_CM, NT_CM_APP_GENERAL); } /** * crafts man leader @@ -265,8 +267,7 @@ public class TerminalInfo { static { aliasMap.put(NT_CM_APP_CM_WORKER, NT_CM_APP_CM_WORKER); aliasMap.put(STR_TERMINAL_CM_WORKER, NT_CM_APP_CM_WORKER); - aliasMap.put(STR_TERMINAL_CM, NT_CM_APP_CM_WORKER); - aliasMap.put(NUM_TERMINAL_CM, NT_CM_APP_CM_WORKER); + // 默认把cm归到工人terminal,但可以guess一下。 } From 6a48bc34304df712d28479cc207ca57ee9dd56ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=AE=81?= Date: Wed, 12 Apr 2023 14:41:07 +0800 Subject: [PATCH 09/11] Add:AppUserId --- .../axzo/framework/auth/domain/UserInfo.java | 46 ++++++++++--------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/UserInfo.java b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/UserInfo.java index aaa9b5d..8aa5a92 100644 --- a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/UserInfo.java +++ b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/UserInfo.java @@ -14,23 +14,28 @@ public class UserInfo { /** * 自然人ID,从原axzoId迁移过来的,每个自然人有一个ID,后续这里的ID会被治理,不会和原axzoId一一对应。 - */ - private Long personId; + */ + private Long personId; - /** - * 身份ID,以后大家最常用的ID,用于各种具体的业务场景。 - */ - private Long identityId; + /** + * 身份ID,以后大家最常用的ID,用于各种具体的业务场景。 + */ + private Long identityId; - private Integer identityType; + /** + * 三方中控平台的用户id + */ + private Long appUserId; - /** - * 认证状态 - */ - private VerifyStatusEnum verifyStatus; + private Integer identityType; - /** - * 账号ID,从原axzoId迁移过来的,是用来登录、发消息、发手机短信等使用的账号。 + /** + * 认证状态 + */ + private VerifyStatusEnum verifyStatus; + + /** + * 账号ID,从原axzoId迁移过来的,是用来登录、发消息、发手机短信等使用的账号。 */ private Long acntId; @@ -82,7 +87,7 @@ public class UserInfo { /** * userId=identityId,身份ID * 尽量使用上面的三个ID,identityId、personId、acntId - * + * * 这个值是这样取到的: * Long oldIdentityId = ProfileIdRepair.identityNew2OldId(userInfo.getIdentityId(), userInfo.getIdentityType()); */ @@ -113,7 +118,7 @@ public class UserInfo { @Deprecated private Integer verifiedStatus; - + /** * 原账号ID == 现在的personId @@ -166,12 +171,12 @@ public class UserInfo { // * 身份验证过期时间 // */ // private boolean credentialsNonExpired; - + // /** // * 原来用来传projectId的字段,apollo用的最多 // */ // private Long tenantId; - + // /** // * 分包机构名称 // */ @@ -203,7 +208,7 @@ public class UserInfo { // * 项目一级总包部门Id // */ // private Long totalAgencyId; - + // /** // * level=用户角色类型 // * public interface UserRoleType @@ -217,7 +222,7 @@ public class UserInfo { // * 使用标准的鉴权能力,尽量少用这个字段。 // */ // //private String level; - + // /** // * 1: 工人 2: 班组长 工人身份 // */ @@ -237,9 +242,6 @@ public class UserInfo { // * 拥有权限的url // */ // private List allUrls; - - - } From 0ce7835543885b85697e93bcf508b9c36ae60a56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=AE=81?= Date: Tue, 18 Apr 2023 17:22:59 +0800 Subject: [PATCH 10/11] Update:AppUserIds --- .../main/java/cn/axzo/framework/auth/domain/UserInfo.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/UserInfo.java b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/UserInfo.java index 8aa5a92..631a901 100644 --- a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/UserInfo.java +++ b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/UserInfo.java @@ -6,6 +6,8 @@ import lombok.Data; import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; +import java.util.Set; + @Data @Slf4j @AllArgsConstructor @@ -22,10 +24,11 @@ public class UserInfo { */ private Long identityId; + /** - * 三方中控平台的用户id + * 三方中控平台的用户ids */ - private Long appUserId; + private Set appUserIds; private Integer identityType; From 2e1064b45d0130ec5970ddaa8f883bcfd2986924 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=AE=81?= Date: Tue, 18 Apr 2023 18:18:06 +0800 Subject: [PATCH 11/11] Add:appId --- .../cn/axzo/framework/auth/constants/AuthConstants.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/constants/AuthConstants.java b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/constants/AuthConstants.java index 5bf32a0..eb86036 100644 --- a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/constants/AuthConstants.java +++ b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/constants/AuthConstants.java @@ -2,7 +2,8 @@ package cn.axzo.framework.auth.constants; public class AuthConstants { private AuthConstants(){} - public static final String ENV_DEV="dev"; + public static final String ENV_DEV = "dev"; + public static final String App_APPID = "appid"; /** * @deprecated 之前传projectId,以后废弃 @@ -16,8 +17,8 @@ public class AuthConstants { public static final String HEADER_SAAS_TENANT_ID = "saasTenantId"; public static final String HEADER_WORKSPACE_ID = "workspaceId"; - public static final String HEADER_OU_ID = "ouId"; - + public static final String HEADER_OU_ID = "ouId"; + public static final String HEADER_TERMINAL = "terminal"; public static final String HEADER_SYSTEM_TYPE = "systemType";