前言
这是一个练习项目,来源于网上一个需求,很感兴趣,就自己做了一个DEMO。
之前这类工作大刘同学做的比较多,就当想念他一下吧。
Spring+JWT实现基础微服务
Spring使用微服务,有完整的Cloud组件协助完成。但是通常Cloud太过庞大,很多小的项目需要一定的业务拆分,但是业务组件之间可能不需要使用Cloud那么庞大的管理。
主要功能
这个Demo就是针对这个目的设立的,主要完成了:
- 使用JWT实现了无Session化的访问控制,适合前端APP类的接入
- 使用了一个OAuthServer服务器,完成认证工作(授权的部分Dummy了,很容易扩展)
- 实现了一个Miscroservcie1作为微服务组件1,模拟获取用户的基本信息
- 实现了一个Miscroservcie2作为微服务组件2,模拟获取用户的技能信息(多条技能)
业务流程:
- 用户通过OAuthServer进行Login认证,获取JWT Token
- 通过JWT Token访问Miscroservcie1,获取用户的基本信息和技能信息
- Miscroservcie1中,传递JWT Token到Miscroservcie2,获取技能信息,同基本信息一起打包返回给前端
很简单的需求,代码也没有复杂的地方,核心在Miscroservcie1通过ThreadLocal和RestTemplateInterceptor实现了基于RestTemplate的JWT Token的透传,完成的级联认证。
在项目中使用可以优化的内容:
- JWT Token中如何封装授权信息,还是由Miscroservcie通过接口访问OAuthServer来获取
- Miscroservcie拿到JWT Token后,是否需要向OAuthServer进行增强验证
- 结合上面两个需求,理想的方案还是JWT Token尽可能简单,只有Principal的ID(用户ID)和超时等JWT信息,其他附加业务信息通过OAuthServer来提供比较好,当然Miscroservcie可以缓存,或者整体使用缓存集群(例如Hazelcast来实现)会更好
代码
好吧,所有的都在代码中了: MicroservicesJwtOAuth
(本页梳理耗时30分钟)