添加两个hook方法支持Userinfo扩展字段

This commit is contained in:
zhangtianyu 2022-04-24 17:49:57 +08:00
parent 49017dbb99
commit 3284fb2cc9
3 changed files with 24 additions and 10 deletions

View File

@ -6,6 +6,5 @@ import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface PreBuildUser {
//todo default
String value();
String value() default "";
}

View File

@ -1,11 +1,14 @@
package cn.axzo.framework.auth.domain;
import cn.hutool.json.JSONObject;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;
@Data
@ -55,4 +58,16 @@ public class UserInfo {
private String appVersion;
private String token;
private String visitTo;
/**
* 使用http request 设置自定义字段
* @param request http请求
*/
public void buildCustomField(HttpServletRequest request) {}
/**
* 使用用户信息map 设置自定义字段
* @param userInfo 用户信息
*/
public void buildCustomField(Map userInfo) {}
}

View File

@ -44,10 +44,6 @@ public class BuilderUserInfoAspect {
public void fillInUserInfoDetail(HttpServletRequest request, ProceedingJoinPoint pjp) {
String userJsonInfo = request.getHeader(AopConstants.USER_INFO);
if (StringUtils.isEmpty(userJsonInfo)) {
//没有拿到用户信息这个构建也没有意义了 //todo 做个异常处理
return;
}
//转编码
String userInfo = Base64.decodeStr(userJsonInfo);
//请求头获取数据
@ -64,9 +60,9 @@ public class BuilderUserInfoAspect {
Class<?>[] parameterTypes = method.getParameterTypes();
Object[] pjpArgs = pjp.getArgs();
for (int i = 0; i < parameterTypes.length; i++) {
if (parameterTypes[i].isAssignableFrom(UserInfo.class)) {
if (UserInfo.class.isAssignableFrom(parameterTypes[i])) {
UserInfo pjpArg = (UserInfo) pjpArgs[i];
buildUserInfoWithAspect(pjpArg, userInfo);
pjpArg.buildCustomField(request);
//塞一些系统参数
pjpArg.setAppVersion(appVersion);
pjpArg.setDeviceKind(deviceKind);
@ -75,16 +71,20 @@ public class BuilderUserInfoAspect {
pjpArg.setTenantId(tenantId);
pjpArg.setVisitTo(visitTo);
pjpArg.setToken(authorization);
if (StringUtils.isEmpty(userJsonInfo)) {
//没有拿到用户信息这个构建也没有意义了 //todo 做个异常处理
return;
}
buildUserInfoWithAspect(pjpArg, userInfo);
break;
}
}
}
public void buildUserInfoWithAspect(UserInfo userInfo, String userJsonInfo) {
//todo 直接获取用户信息
Map map = JSONUtil.toBean(userJsonInfo, Map.class);
// Map data = (Map) map.get("data");
//对bean进行封装属性
BeanUtil.fillBeanWithMap(map, userInfo, false);
userInfo.buildCustomField(map);
}
}