:分布式系统授权-拓展用户信息)
本章代码已分享至Gitee:https://gitee.com/lengcz/distributed-security01.git扩展用户信息目前jwt令牌存储了用户的身份信息权限信息网关将token明文转换后转发给微服务使用目前用户身份信息仅包括了用户的账号微服务还能需要用户的ID手机号等重要信息。所以本案例将扩展用户信息的思路和方法满足微服务使用用户信息的需求。下面分析JWT令牌中扩展用户信息的方案。在认证阶段DaoAuthenticationProvider会调用UserDetailService查询用户信息这里是可以获取到齐全的用户信息的。由于JWT令牌中用户身份信息来源于UserDetails中仅定义了username为用户的身份信息这里有两个思路第一是可以扩展UserDetails使之包括更多的自定义属性第二也可以扩展username的内容比如存入json数据内容作为username的内容。相比较而言方案二比较简单不破坏UserDetails的结构这里采用方案二。修改UserDetailService从数据库查询到User将整体user转成json存入userDetails对象。StringprincipalJSON.toJSONString(user);//身份信息UserDetailsuserDetailsUser.withUsername(principal).password(user.getPassword()).authorities(permissionArr).build();重新申请令牌后访问r1资源可以看到原来的username就是存入的json格式的用户信息。修改TokenAuthenticationFilter 将UAA存入的用户信息转换为UserDTO即可。此时再次访问r1资源查看可以看到UserDTO的其他字段已经有信息了。