SpringBoot+SpringSecurity之多模块用户认证受权同步

在以前的文章里介绍了SpringBoot和SpringSecurity如何继承。以后咱们须要考虑另一个问题:当前微服务化也已是大型网站的趋势,当咱们的项目采用微服务化架构时,每每会出现以下状况:浏览器

  1. 首先,咱们会创建一个用户中心UserCenter,实现用户的登陆、登出以及其余用户信息维护等相关功能。
  2. 而后,咱们会有其余业务模块,好比订单中心OrderCenter,用来建立、删除及查看订单信息,其中建立、删除订单须要管理员角色。

那么接下来咱们思考咱们如何作到统一的用户认证及鉴权?cookie

毫无疑问的,首先咱们须要在UserCenter中引入SpringSecurity,并保证UserCenter可实现用户登陆、登出以及自身接口的鉴权等功能正常使用。而后OrderCenter只须要接口的鉴权功能,登陆、登出统一交由UserCenter处理。那么问题来了:session

用户的认证及受权是由UserCenter来处理的,OrderCenter怎么能知道究竟是哪一个用户登陆并拥有哪些权限呢?架构

其实很简单,以前的文章咱们有提到SpringBoot+SpringSecurity+SpringSession+Redis来实现UserCenter多点部署时的session共享,上面这个问题也能够经过此方式解决,基本原理:微服务

UserCenter模块网站

  1. 整合SpringSecurity:负责用户的认证和受权,经过cookie识别是否同一session会话,并将认证经过的用户及其拥有权限放置到HttpSession中。cookie相似以下:
    SESSION=MzkyNDVjNGUtMjIzNi00ZjcwLTljN2QtNjBjZmUxNGI2ZGEy; Path=/; HttpOnly
  2. 整合SpringSession:负责将HttpSession中的信息放置到Redis中。
  3. 整合Redis:执行存储。

OrderCenter模块spa

  1. 整合SpringSecurity:负责调用接口时鉴权。须要保证UserCenter和OrderCenter相同域名,这样浏览器调用OrderCenter接口的时候会携带UserCenter完成登陆后的cookie。
  2. 整合SpringSession:负责根据cookie的session回话标识到Redis中获取用户认证信息及其拥有权限。
  3. 整合Redis:提供存储查询。

那么这里挖个坑:若是UserCenter和OrderCenter不是同一个域名呢??

相关文章
相关标签/搜索