回过头来说一下资源服务器的问题点吧,这里OAuth2+JWT用的是spring security,具体怎么用spring security搭建资源服务器我就不说了。这里要讨论的问题是这样的,我们希望在spring mvc中,直接通过如下的形式获得登录用户信息
@GetMapping("/me")
public Authentication me(OAuth2Authentication user) {
ProcessUser principal = (ProcessUser) user.getPrincipal(); // 获得自己实现的类
return user;
}
其中ProcessUser是我们自己实现的类,包含了通过tokenEnchance扩展的自定义用户信息。
一、spring security资源服务器源码解析
为了找到实现的思路,我们需要分析源码,找寻线索。和之前的文章一样,我把执行的关键部分总结成了一张图,有兴趣的可以自己打断点跟踪一遍。这里要吐槽一下,本来用写得画的图,画到一般出bug了,所以后面一部分用的excel
大体的流程再总结一下:资源认证服务器filter->AuthenticationManager->DefaultTokenServices->JwtTokenStore->JwtAccessTokenConverter->DefaultAccessTokenConverter
大体思路也总