在之前的文章里介绍了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不是同一个域名呢??

SpringBoot+SpringSecurity之多模块用户认证授权同步的更多相关文章

  1. springboot+springsecurity+mybatis plus之用户认证

    一.权限管理的概念 另一个安全框架shiro:shiro之权限管理的描述 导入常用坐标 <dependency> <groupId>org.springframework.bo ...

  2. SpringBoot + SpringSecurity + Mybatis-Plus + JWT实现分布式系统认证和授权

    1. 简介   Spring Security是一个功能强大且易于扩展的安全框架,主要用于为Java程序提供用户认证(Authentication)和用户授权(Authorization)功能.    ...

  3. auth模块用户认证

    一.auth模块什么 auth模块时django自带的用户认证模块 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功 ...

  4. Django之auth模块用户认证模块

    一.Auth模块 1)auth模块是什么.登录后台使用的账号密码,则就是使用的auth模块创建的表 Auth模块是Django自带的用户认证模块: 我们在开发一个网站的时候,无可避免的需要设计实现网站 ...

  5. Mysql之用户认证授权管理

    概述 Mysql的认证采用账号密码方式,其中账号由两个部分组成:Host和User:Host为允许登录的客户端Ip,User为当前登录的用户名. 授权没有采用典型的RBAC(基于角色的访问控制),而是 ...

  6. springboot+springsecurity+mybatis plus之用户授权

    文章目录 前言 一.导入坐标 二.Users实体类及其数据库表的创建 三.controller,service,mapper层的实现 四.核心--编写配置文件 五.无权限界面和登录界面的实现 前言 即 ...

  7. springBoot+springSecurity 数据库动态管理用户、角色、权限

    使用spring Security3的四种方法概述 那么在Spring Security3的使用中,有4种方法: 一种是全部利用配置文件,将用户.权限.资源(url)硬编码在xml文件中,已经实现过, ...

  8. springBoot+springSecurity 数据库动态管理用户、角色、权限(二)

    序: 本文使用springboot+mybatis+SpringSecurity 实现数据库动态的管理用户.角色.权限管理 本文细分角色和权限,并将用户.角色.权限和资源均采用数据库存储,并且自定义滤 ...

  9. SpringBoot + SpringSecurity + Mybatis-Plus + JWT + Redis 实现分布式系统认证和授权(刷新Token和Token黑名单)

    1. 前提   本文在基于SpringBoot整合SpringSecurity实现JWT的前提中添加刷新Token以及添加Token黑名单.在浏览之前,请查看博客:   SpringBoot + Sp ...

随机推荐

  1. day13-Python运维开发基础(递归与尾递归)

    递归与尾递归 # ### 递归函数 """ 递归函数: 自己调用自己的函数 递:去 归:回 有去有回是递归 """ # 简单递归 def d ...

  2. 一个Java的小问题

    老师今天在讨论群里抛出了一个问题,让大家尝试思考一下他所给的一段代码输出是什么. 其代码如下: class T { void foo() { this.bar(); } void bar() { Sy ...

  3. MariaDB——日志文件

    数据库各类日志  查询日志:   记录每一条sql语句,建议不开启,因为如果访问量过大,会占用相当大的资源,影响数据库的性能.    vim /etc/my.cnf.d/server.cnf    g ...

  4. idea中如何将一个普通项目转换为maven项目

    在pom.xml 文件上右键 Add as Maven Project即可.

  5. mutiset的简单介绍转载

    原文链接:https://blog.csdn.net/sodacoco/article/details/84798621        c++语言中,multiset是<set>库中一个非 ...

  6. vagrant的使用介绍

    ()添加镜像到本地仓库 vagrant box add bt_centos6.6_zouke centos-6.6-x86_64.box )初始化 vagrant init ()启动vm vagran ...

  7. 产品原型 UI 设计工具

    产品原型设计工具 Balsamiq Mockups Axure RP 图像处理.绘制工具 ps,AI 跨平台 UI开发工具 QT , Unity3D

  8. 前端学习笔记系列一:2 Vue的单文件组件

    (1)非单文件vue组件和单文件vue组件的一般写法 一个完整的vue组件会包括三个部分:一是template模板部分,二是js程序逻辑部分,三是css样式部分.每个组件都有属于自己的模板,js和样式 ...

  9. python进阶强化学习

    最近学习了慕课的python进阶强化训练,将学习的内容记录到这里,同时也增加了很多相关知识. 主要分为以下九个模块: 基本使用 迭代器和生成器 字符串 文件IO操作 自定义类和类的继承 函数装饰器和类 ...

  10. C++Review15_内存管理

    一.野指针 定义指针变量时最好初始化为NULL: 内存回收后,指针也用完了,这时候也需要及时将指针置为NULL: 指针就像野狗一样,为了防止它乱指,除了在使用期间,别的时候都需要置为NULL.这样它就 ...