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的其他字段已经有信息了。

相关推荐
我命由我123459 小时前
匈牙利命名法
java·服务器·后端·学习·java-ee·kotlin·学习方法
闲猫9 小时前
LangChain / Integrations / Integrations by component / Tool
java·数据库·langchain
小田的博客9 小时前
SAP MM 供应商银行主数据更新报错!message R1228!
android·java·服务器
苏三说技术10 小时前
一线大厂的Git规范
后端
神奇小汤圆10 小时前
阿里面试官问我:“Redis 的 String 底层是怎么设计的?”,我画完 SDS,他点了点头……
后端
范什么特西10 小时前
知识总结03
java
Cicada12810 小时前
ccvt:一个用 Rust 写的中国地图坐标系互转命令行工具
开发语言·后端·rust
明月_清风10 小时前
🤗 Hugging Face 模型上传完全指南:从本地到 Hub 的 4 种姿势
前端·后端·ai编程
空谷有来人10 小时前
Ubuntu22.04安装jdk17,配置环境变量
java·jdk