在之前的文章里介绍了SpringBoot和SpringSecurity如何继承。之后我们需要考虑另外一个问题:当前微服务化也已经是大型网站的趋势,当我们的项目采用微服务化架构时,往往会出现如下情况:

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

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

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

用户的认证及授权是由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模块

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

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

最新文章

  1. 在thinkphp中,写的博文标签多对多关系的标签频率统计算法
  2. overflow:hidden 影响布局的问题
  3. Python-Matplotlib安装及简单使用
  4. java中的自增问题
  5. IAR Embedded Workbench IDE 显示行号
  6. linux下的僵尸进程处理SIGCHLD信号
  7. c#使用spy进行模拟操作
  8. C# winform 窗体弹出选择目录或文件 的对话框
  9. javascript(3)
  10. [JQuery]serialize()和serializeArray()
  11. 201521123063 《Java程序设计》 第4周学习总结
  12. 201521123036 《Java程序设计》第9周学习总结
  13. pyqt5与QML开发小结
  14. Scaffold-DbContext 命令参数
  15. Python-面向对象(组合、封装与多态)
  16. hbase源码系列(八)从Snapshot恢复表
  17. LoadRunner 技巧之 IP欺骗 (推荐)
  18. Redis configuration
  19. Page.TryUpdateModel 方法
  20. 高可用Kubernetes集群-9. 部署kubelet

热门文章

  1. Mybatis入门(六)联查之多对一
  2. 「NOIP2014」飞扬的小鸟
  3. leetcode322 Coin Change
  4. Lesson 2 Spare that spider
  5. 配置antMatchers(HttpMethod.GET,"/**").permitAll()当时仍然会校验
  6. 题解 loj2065 「SDOI2016」模式字符串
  7. NO26 Linux的文件权限--chmod--Linux删除文件说明--suid--sgid
  8. vue 路由过渡效果(1)
  9. HTML学习第六天
  10. Project导入RedMine甘特图展示