SpringBoot+SpringSecurity之多模块用户认证授权同步
在之前的文章里介绍了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不是同一个域名呢??
SpringBoot+SpringSecurity之多模块用户认证授权同步的更多相关文章
- springboot+springsecurity+mybatis plus之用户认证
一.权限管理的概念 另一个安全框架shiro:shiro之权限管理的描述 导入常用坐标 <dependency> <groupId>org.springframework.bo ...
- SpringBoot + SpringSecurity + Mybatis-Plus + JWT实现分布式系统认证和授权
1. 简介 Spring Security是一个功能强大且易于扩展的安全框架,主要用于为Java程序提供用户认证(Authentication)和用户授权(Authorization)功能. ...
- auth模块用户认证
一.auth模块什么 auth模块时django自带的用户认证模块 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功 ...
- Django之auth模块用户认证模块
一.Auth模块 1)auth模块是什么.登录后台使用的账号密码,则就是使用的auth模块创建的表 Auth模块是Django自带的用户认证模块: 我们在开发一个网站的时候,无可避免的需要设计实现网站 ...
- Mysql之用户认证授权管理
概述 Mysql的认证采用账号密码方式,其中账号由两个部分组成:Host和User:Host为允许登录的客户端Ip,User为当前登录的用户名. 授权没有采用典型的RBAC(基于角色的访问控制),而是 ...
- springboot+springsecurity+mybatis plus之用户授权
文章目录 前言 一.导入坐标 二.Users实体类及其数据库表的创建 三.controller,service,mapper层的实现 四.核心--编写配置文件 五.无权限界面和登录界面的实现 前言 即 ...
- springBoot+springSecurity 数据库动态管理用户、角色、权限
使用spring Security3的四种方法概述 那么在Spring Security3的使用中,有4种方法: 一种是全部利用配置文件,将用户.权限.资源(url)硬编码在xml文件中,已经实现过, ...
- springBoot+springSecurity 数据库动态管理用户、角色、权限(二)
序: 本文使用springboot+mybatis+SpringSecurity 实现数据库动态的管理用户.角色.权限管理 本文细分角色和权限,并将用户.角色.权限和资源均采用数据库存储,并且自定义滤 ...
- SpringBoot + SpringSecurity + Mybatis-Plus + JWT + Redis 实现分布式系统认证和授权(刷新Token和Token黑名单)
1. 前提 本文在基于SpringBoot整合SpringSecurity实现JWT的前提中添加刷新Token以及添加Token黑名单.在浏览之前,请查看博客: SpringBoot + Sp ...
随机推荐
- Keras入门——(3)生成式对抗网络GAN
导入 matplotlib 模块: import matplotlib 查看自己版本所支持的backends: print(matplotlib.rcsetup.all_backends) 返回信息: ...
- redis api-hash
- JavaScript函数用法
本文我们来学习下js函数的一些用法. 上图的要点为: 1.函数具有属性,如foo.length和foo.name. 2.arguments是类数组,arguments.length为实参的数目. 3. ...
- java小项目之:抽奖系统!java初学者必备(内附源码)
[Java]Java摇奖源码,Java抽奖源码,Java随机抽奖源码 任务描述 本次任务要求为某商场开发一套幸运抽奖系统,客户必须首先注册成为该商场会员,会员登录成功后,就可以参加抽奖活动了.注册 用 ...
- 本地模拟内存溢出并分析Dump文件
java Dump文件分析 前言 dump文件是java虚拟机内存在某一时间点的快照文件,一般是.hprof文件,下面自己模拟一下本地内存溢出,生成dump文件,然后通过mat工具分析的过程. 配置虚 ...
- java递归调用 return的问题
最近比较闲,写了个递归调用获取最大公约数,刚开始写错了,但一直不明白错在哪,错误代码如下: public class Demo { public static void main(String[] a ...
- [STL]string类型的getline函数
3.cin.getline() 实际是cin.getline(接收字符串到m,接收个数n,结束字符).接收一个字符串,可以接收空格等,最后一个字符为‘\0’.结束符可以通过设置第三个参数自己设置,默认 ...
- SpringCloud实战——(1)创建SpringCloud项目
首先创建一个SpirngCloud工程,并添加公用依赖. <?xml version="1.0" encoding="UTF-8"?> <pr ...
- Docker基础——从入门到精通
一个完整的docker由几个部分组成? docker client docker daemon docker images docker containers 容器是一个存储.运输工具,它能对容器内 ...
- centos7 程序快捷方式
/usr/share/Applications 在此文件夹中,全是".desktop"的文件,利用终端打开一个看看就知道了!