扩展用户信息
目前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的其他字段已经有信息了。
