SpringBoot+SpringSecurity之多模块用户认证授权同步
2024-09-03 03:44:50
在之前的文章里介绍了SpringBoot和SpringSecurity如何继承。之后我们需要考虑另外一个问题:当前微服务化也已经是大型网站的趋势,当我们的项目采用微服务化架构时,往往会出现如下情况:
- 首先,我们会建立一个用户中心UserCenter,实现用户的登录、登出以及其他用户信息维护等相关功能。
- 然后,我们会有其他业务模块,比如订单中心OrderCenter,用来创建、删除及查看订单信息,其中创建、删除订单需要管理员角色。
那么接下来我们思考我们如何做到统一的用户认证及鉴权?
毫无疑问的,首先我们需要在UserCenter中引入SpringSecurity,并保证UserCenter可实现用户登录、登出以及自身接口的鉴权等功能正常使用。然后OrderCenter只需要接口的鉴权功能,登录、登出统一交由UserCenter处理。那么问题来了:
用户的认证及授权是由UserCenter来处理的,OrderCenter怎么能知道到底是哪个用户登录并拥有哪些权限呢?
其实很简单,之前的文章我们有提到SpringBoot+SpringSecurity+SpringSession+Redis来实现UserCenter多点部署时的session共享,上面这个问题也可以通过此方式解决,基本原理:
UserCenter模块
- 整合SpringSecurity:负责用户的认证和授权,通过cookie识别是否同一session会话,并将认证通过的用户及其拥有权限放置到HttpSession中。cookie类似如下:
SESSION=MzkyNDVjNGUtMjIzNi00ZjcwLTljN2QtNjBjZmUxNGI2ZGEy; Path=/; HttpOnly
- 整合SpringSession:负责将HttpSession中的信息放置到Redis中。
- 整合Redis:执行存储。
OrderCenter模块
- 整合SpringSecurity:负责调用接口时鉴权。需要保证UserCenter和OrderCenter相同域名,这样浏览器调用OrderCenter接口的时候会携带UserCenter完成登录后的cookie。
- 整合SpringSession:负责根据cookie的session回话标识到Redis中获取用户认证信息及其拥有权限。
- 整合Redis:提供存储查询。
那么这里挖个坑:如果UserCenter和OrderCenter不是同一个域名呢??
最新文章
- 在thinkphp中,写的博文标签多对多关系的标签频率统计算法
- overflow:hidden 影响布局的问题
- Python-Matplotlib安装及简单使用
- java中的自增问题
- IAR Embedded Workbench IDE 显示行号
- linux下的僵尸进程处理SIGCHLD信号
- c#使用spy进行模拟操作
- C# winform 窗体弹出选择目录或文件 的对话框
- javascript(3)
- [JQuery]serialize()和serializeArray()
- 201521123063 《Java程序设计》 第4周学习总结
- 201521123036 《Java程序设计》第9周学习总结
- pyqt5与QML开发小结
- Scaffold-DbContext 命令参数
- Python-面向对象(组合、封装与多态)
- hbase源码系列(八)从Snapshot恢复表
- LoadRunner 技巧之 IP欺骗 (推荐)
- Redis configuration
- Page.TryUpdateModel 方法
- 高可用Kubernetes集群-9. 部署kubelet
热门文章
- Mybatis入门(六)联查之多对一
- 「NOIP2014」飞扬的小鸟
- leetcode322 Coin Change
- Lesson 2 Spare that spider
- 配置antMatchers(HttpMethod.GET,";/**";).permitAll()当时仍然会校验
- 题解 loj2065 「SDOI2016」模式字符串
- NO26 Linux的文件权限--chmod--Linux删除文件说明--suid--sgid
- vue 路由过渡效果(1)
- HTML学习第六天
- Project导入RedMine甘特图展示