Spring Security OAuth2.0(25):分布式系统授权-拓展用户信息

扩展用户信息

目前jwt令牌存储了用户的身份信息,权限信息,网关将token明文转换后转发给微服务使用,目前用户身份信息仅包括了用户的账号,微服务还能需要用户的ID,手机号等重要信息。

所以,本案例将扩展用户信息的思路和方法,满足微服务使用用户信息的需求。

下面分析JWT令牌中扩展用户信息的方案。

在认证阶段DaoAuthenticationProvider会调用UserDetailService查询用户信息,这里是可以获取到齐全的用户信息的。由于JWT令牌中用户身份信息来源于UserDetails中仅定义了username为用户的身份信息,这里有两个思路:第一是可以扩展UserDetails,使之包括更多的自定义属性,第二也可以扩展username的内容,比如存入json数据内容作为username的内容。相比较而言,方案二比较简单不破坏UserDetails的结构,这里采用方案二。

修改UserDetailService

从数据库查询到User,将整体user转成json存入userDetails对象。

java 复制代码
  String principal = JSON.toJSONString(user);//身份信息
        UserDetails userDetails = User.withUsername(principal).password(user.getPassword()).authorities(permissionArr).build();

重新申请令牌后,访问r1资源,可以看到原来的username就是存入的json格式的用户信息。

修改TokenAuthenticationFilter ,将UAA存入的用户信息转换为UserDTO即可。

此时再次访问r1资源查看,可以看到UserDTO的其他字段已经有信息了。

相关推荐
数据知道4 小时前
Java 安全审计实战:SSRF、反序列化、SpEL 注入
java·开发语言·安全·网络安全
嗝屁小孩纸4 小时前
通用后端基础能力平台(多模块技术总结与避坑指南)
java
CodeStats4 小时前
【Java 表达式引擎】如何设计一套 Java 表达式引擎:从递归下降到 AST 求值的完整实践
java·ai编程·表达式·引擎
vipxieliang4 小时前
ValidX错误消息国际化完全指南:8种语言9个语言包与三级回退机制
java·spring boot
65岁退休Coder5 小时前
LangGraph v1.2.9 核心概念 & 流程控制
后端·python·langchain
xbgRS5 小时前
RocketMQ消费者消息获取
java·rocketmq·java-rocketmq
云和数据.ChenGuang5 小时前
git revert回退问题
java·服务器·人工智能·git·fastapi·强化学习
程序员鱼皮5 小时前
爆火的《牛来》模型正式发布!DeepSeek 的排名又下降了。。
前端·后端·ai编程
山鬼龙王5 小时前
从源码角度剖析:Spring如何用三级缓存解决循环依赖
spring
灯澜忆梦5 小时前
【基于GO的Web开发15】gin路由和路由组
前端·后端·golang·gin