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

相关推荐
实名上网宋凯宣6 小时前
Django
后端·python·django
天河归来7 小时前
第三方接口不稳定,如何让核心任务继续完成
java·大数据
Knight_AL7 小时前
Java 文件下载时文件名中的 `#` 被转换成 `%23`?一次 URL 编码与解码问题排查
java·开发语言
利威尔xu7 小时前
Go IM 源码实战(14):本地缓存快 3000 倍,失效却难 10 倍
后端·缓存·微服务·面试·golang
逃逸线LOF8 小时前
Ribbon负载均衡原理(Irule组件、源码分析)
后端·spring cloud·ribbon
砚底藏山河8 小时前
python量化自定义周期 K 线合成
java·开发语言·数据库·python·金融
慢云智慧空间8 小时前
从设备智能到空间理解,空间智能终端解决方案商如何重新定义行业标准
后端
利威尔xu8 小时前
Go IM 源码实战(13):30 个会话只有 2 个红点,未读数错在三条路径
redis·后端·微服务·面试·golang
猿究院_夏燊9 小时前
MySQL 的四种隔离级别
java·数据库·mysql
薛定谔的猫-菜鸟程序员9 小时前
软件架构设计师开发资料大全(从入门到精通)
后端·python·系统架构·flask·架构设计师