Spring+JWT实现微服务集群

前言

这是一个练习项目,来源于网上一个需求,很感兴趣,就自己做了一个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分钟)