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

相关推荐
智慧物业老杨3 小时前
物业数字化落地思考:真正的转型,是底层数据秩序的重构
java·大数据·人工智能·微服务·系统架构
上进小菜猪6 小时前
把 KES 集群交给 Kubernetes 的九十天:一个 DBA 的试用实录
后端
星空6 小时前
金蝶苍穹build.gradle配置
java·build.gradle
两点王爷6 小时前
PostgreSQL 常用 SQL 语句与 GIS 相关函数详解
数据库·后端
考虑考虑7 小时前
Springboot环境变量占位符语法
spring boot·后端·spring
步行cgn9 小时前
Spring 基于 XML 的自动装配:byName 详解
java·后端·spring
不会c+9 小时前
Day02 - 需求分析与用例建模
spring
大帅点兵9 小时前
Apache Ant 1.9.9 完整讲解
java
LuTshoes9 小时前
spring ai 实战 手搓 PlaneExecuteAgent
java·人工智能·spring·ai
这料鬼有毒10 小时前
二刷hot100-73.矩阵置零
java