【优化】支持登陆用户,直接读取昵称、部门等信息,也支持自定义字段

This commit is contained in:
YunaiV
2024-04-07 19:51:24 +08:00
parent 9de92e730b
commit e2c1c7d380
14 changed files with 176 additions and 89 deletions

View File

@@ -3,6 +3,7 @@ package cn.iocoder.yudao.gateway.filter.security;
import lombok.Data;
import java.util.List;
import java.util.Map;
/**
* 登录用户信息
@@ -22,6 +23,10 @@ public class LoginUser {
* 用户类型
*/
private Integer userType;
/**
* 额外的用户信息
*/
private Map<String, String> info;
/**
* 租户编号
*/

View File

@@ -3,7 +3,6 @@ package cn.iocoder.yudao.gateway.filter.security;
import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.common.core.KeyValue;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.util.cache.CacheUtils;
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
import cn.iocoder.yudao.gateway.util.SecurityFrameworkUtils;
import cn.iocoder.yudao.gateway.util.WebFrameworkUtils;
@@ -27,7 +26,6 @@ import java.util.Objects;
import java.util.function.Function;
import static cn.iocoder.yudao.framework.common.util.cache.CacheUtils.buildAsyncReloadingCache;
import static cn.iocoder.yudao.framework.common.util.cache.CacheUtils.buildCache;
/**
* Token 过滤器,验证 token 的有效性
@@ -154,6 +152,7 @@ public class TokenAuthenticationFilter implements GlobalFilter, Ordered {
// 创建登录用户
OAuth2AccessTokenCheckRespDTO tokenInfo = result.getData();
return new LoginUser().setId(tokenInfo.getUserId()).setUserType(tokenInfo.getUserType())
.setInfo(tokenInfo.getUserInfo()) // 额外的用户信息
.setTenantId(tokenInfo.getTenantId()).setScopes(tokenInfo.getScopes());
}

View File

@@ -3,10 +3,14 @@ package cn.iocoder.yudao.gateway.util;
import cn.hutool.core.map.MapUtil;
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
import cn.iocoder.yudao.gateway.filter.security.LoginUser;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.util.StringUtils;
import org.springframework.web.server.ServerWebExchange;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
/**
* 安全服务工具类
*
@@ -14,6 +18,7 @@ import org.springframework.web.server.ServerWebExchange;
*
* @author 芋道源码
*/
@Slf4j
public class SecurityFrameworkUtils {
private static final String AUTHORIZATION_HEADER = "Authorization";
@@ -100,7 +105,14 @@ public class SecurityFrameworkUtils {
* @param user 用户
*/
public static void setLoginUserHeader(ServerHttpRequest.Builder builder, LoginUser user) {
builder.header(LOGIN_USER_HEADER, JsonUtils.toJsonString(user));
try {
String userStr = JsonUtils.toJsonString(user);
userStr = URLEncoder.encode(userStr, StandardCharsets.UTF_8); // 编码,避免中文乱码
builder.header(LOGIN_USER_HEADER, userStr);
} catch (Exception ex) {
log.error("[setLoginUserHeader][序列化 user({}) 发生异常]", user, ex);
throw ex;
}
}
}