From b2c4d121bf3ca5bc2399744605d3142d7cfcf86e Mon Sep 17 00:00:00 2001 From: zhangtianyu Date: Tue, 26 Apr 2022 17:16:20 +0800 Subject: [PATCH] merge --- .../framework/auth/domain/ObjectType.java | 28 +++++++++++ .../framework/auth/domain/RequestInfo.java | 29 +++++++++++ .../framework/auth/domain/UserInfoMap.java | 49 +++++++++++++++++++ .../auth/service/BuilderUserInfoAspect.java | 31 ++---------- 4 files changed, 109 insertions(+), 28 deletions(-) create mode 100644 axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/ObjectType.java create mode 100644 axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/RequestInfo.java create mode 100644 axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/UserInfoMap.java diff --git a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/ObjectType.java b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/ObjectType.java new file mode 100644 index 0000000..ed955b2 --- /dev/null +++ b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/ObjectType.java @@ -0,0 +1,28 @@ +package cn.axzo.framework.auth.domain; + +import cn.hutool.core.lang.TypeReference; +import cn.hutool.core.util.TypeUtil; + +import java.lang.reflect.Type; + +/** + * 对象类型 用于支持类型转换 如 integer -> long + * @author zhangtianyu + * @date 2022/4/26 3:46 PM + **/ +public class ObjectType extends TypeReference { + private final Type objectType; + + public ObjectType(Class clazz) { + this.objectType = clazz; + } + + public ObjectType() { + this.objectType = TypeUtil.getTypeArgument(getClass()); + } + + @Override + public Type getType() { + return objectType; + } +} diff --git a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/RequestInfo.java b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/RequestInfo.java new file mode 100644 index 0000000..abc5061 --- /dev/null +++ b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/RequestInfo.java @@ -0,0 +1,29 @@ +package cn.axzo.framework.auth.domain; + +import lombok.Data; + +import javax.servlet.http.HttpServletRequest; + +/** + * 请求数据 + * @author zhangtianyu + * @date 2022/4/25 10:10 AM + **/ +@Data +public class RequestInfo { + /** + * 租户id + */ + private String tenantId; + private String systemType; + private String deviceKind; + private String deviceNo; + private String appVersion; + private String token; + private String visitTo; + /** + * 使用http request 设置自定义字段 + * @param request http请求 + */ + public void buildCustomRequestInfo(HttpServletRequest request) {} +} diff --git a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/UserInfoMap.java b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/UserInfoMap.java new file mode 100644 index 0000000..65ee3d5 --- /dev/null +++ b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/domain/UserInfoMap.java @@ -0,0 +1,49 @@ +package cn.axzo.framework.auth.domain; + +import cn.hutool.core.convert.Convert; +import java.util.Map; + +/** + * 保存从request header 中获取的UserInfo + * + * @author zhangtianyu + * @date 2022/4/26 2:15 PM + **/ +public class UserInfoMap { + private final Map map; + + public UserInfoMap(Map map) { + this.map = map; + } + + /** + * 获取string类型 + */ + public String get(String name) { + return get(name, String.class); + } + + public T get(String name, ObjectType type) { + return Convert.convertWithCheck(type, map.get(name), null, false); + } + + /** + * 获取基本类型 例如Long Integer Double + */ + public T get(String name, Class clazz) { + return Convert.convertWithCheck(new ObjectType(clazz), map.get(name), null, false); + } + + /** + * 获取引用类型 例如List List + */ + public T getReference(String name) { + return Convert.convertWithCheck(new ObjectType(), map.get(name), null, false); + } + + + public Map getMap() { + return this.map; + } + +} diff --git a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/service/BuilderUserInfoAspect.java b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/service/BuilderUserInfoAspect.java index 5d38c49..14584c3 100644 --- a/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/service/BuilderUserInfoAspect.java +++ b/axzo-auth-spring-boot-starter/src/main/java/cn/axzo/framework/auth/service/BuilderUserInfoAspect.java @@ -46,23 +46,11 @@ public class BuilderUserInfoAspect { log.error("can not get request,there is a error occurrence ==>" + exception.getCause().getMessage()); } Assert.notNull(httpRequest, "httpReqeust cant be null, this is error"); - this.fillInUserInfoDetail(httpRequest, pjp); - //todo request 为null - assert httpRequest != null; this.fillInUserInfoDetail(httpRequest, pjp, preBuildUser.requestInfo()); return pjp.proceed(); } - public void fillInUserInfoDetail(HttpServletRequest request, ProceedingJoinPoint pjp) { - //请求头获取数据 - String tenantId = request.getHeader(AopConstants.HEADER_TENANT); - String systemType = request.getHeader(AopConstants.HEADER_SYSTEM_TYPE); - String authorization = request.getHeader(AopConstants.HEADER_AUTH); - String deviceKind = request.getHeader(AopConstants.HAEDER_DEVICE_KIND); - String deviceNo = request.getHeader(AopConstants.HAEDER_DEVICE_NO); - String appVersion = request.getHeader(AopConstants.HAEDER_APP_VERSION); - String visitTo = request.getHeader(AopConstants.VISIT_TO); - + public void fillInUserInfoDetail(HttpServletRequest request, ProceedingJoinPoint pjp, Class requestInfoClass) { String userinfoJson = ""; //本地运行 分两种情况 postMan/junit //判断本地环境 @@ -111,26 +99,13 @@ public class BuilderUserInfoAspect { for (int i = 0; i < parameterTypes.length; i++) { if (parameterTypes[i].isAssignableFrom(UserInfo.class)) { UserInfo pjpArg = (UserInfo) pjpArgs[i]; - buildUserInfoWithAspect(pjpArg, userinfoJson); - //塞一些系统参数 - pjpArg.setAppVersion(appVersion); - pjpArg.setDeviceKind(deviceKind); - pjpArg.setDeviceNo(deviceNo); - pjpArg.setSystemType(systemType); - pjpArg.setTenantId(tenantId); - pjpArg.setVisitTo(visitTo); - pjpArg.setToken(authorization); + buildRequestInfo(pjpArg, request, requestInfoClass); + buildUserInfo(pjpArg, userinfoJson); break; } } } - public void buildUserInfoWithAspect(UserInfo userInfo, String userJsonInfo) { - //todo 直接获取用户信息。 - Map map = JSONUtil.toBean(userJsonInfo, Map.class); - BeanUtil.fillBeanWithMap(map, userInfo, false); - } - //从env/properties 获取my_pod_namespace 的value public String getSystemProperties() { PodNamespacePropertyDefiner podNamespacePropertyDefiner = new PodNamespacePropertyDefiner();