【JAVA EE】详解单点登录

作者简介

目录

1.概述

2.实现方案

2.1.分散鉴权

2.2.集中鉴权


1.概述

SSO,即进行一次认证,然后就可以访问所有子系统。很明显SSO只是一种具象化的目标而已,目前业内为了实现单点登录、统一鉴权,提出了一系列的打法。比如直接就有成熟的组件CAS,其可以直接开箱即食,提供了鉴权中心的服务,也提供了客户端的依赖,直接启动鉴权中心,在客户端引入依赖配置一下就可以使用。比如有标准的协议oauth2.0等,规定了整个流程里有哪些实体和步骤。

其实总的来说单点登录无非就是给登陆后的用户发放一个凭证,然后后续依靠该凭证来进行权限的校验。这个凭证可以是cookie、可以是session,也可以是token、jwt等等,具体想用什么根据自己的业务场景来定就好,目前业内用的最多的是token。本文不会讨论那些繁杂且死板的流程,比如第几步返回什么状态码之类的,博主一直以来都认为,单点登录本来就是种思想,死板的流程没意义。

以下是单点登录的一个大致流程。

第一次登录时:

请求会走到鉴权服务器进行鉴权,发现没有登录,于是就会返回登录页面给用户进行登录,用户登陆后,会返回一份凭证给用户,鉴权中心也会保存一份。

后续的访问:

后续的访问会携带凭证继续走鉴权中心去进行鉴权,鉴权中心会比对凭证来确认用户是否有访问的权限。

这里要注意的是,一般来说都是在每个服务上来实现向鉴权中心进行鉴权的逻辑,并且要处理鉴权成功和失败的一系列逻辑。之所以这样做是因为可以在服务上甄别一下那些操作是需要登录后才可以做的。比如有些操作就是不用登录就可以做的,比如你在淘宝上进行浏览是不需要登陆的,而购买商品才是要登录的。希望不将所有请求无脑的全打到鉴权中心上去,从而形成这样的逻辑架构:

从而减轻鉴权中心的压力。

2.实现方案

实现方案有两种架构:

  1. 分散鉴权
  2. 集中鉴权

2.1.分散鉴权

分散鉴权,即将鉴权能力分散到各个应用上去,不需要单独部署的鉴权中心,所有应用维护同一个凭证的存储介质即可,一般这个凭证的存储介质选用redis之类的缓存来做。各个应用自己进行鉴权,也就是说每个应用上要实现一套完整的鉴权逻辑,还要随着附带上成功和失败的逻辑处理。我猜这时候很多同学想到了,直接给每个服务上一个spring security。确实是可以这样做,用spring security的话可以省去很多我们很多的编码,直接用框架自带的能力来进行鉴权校验即可。

spring security的使用方式,博主有篇文章专门详细讲解过:

详解Spring Security-CSDN博客

当然除了使用spring security以外还有其它的方式,比如:

  • 使用spring mvc的拦截器
  • 使用servlet的过滤器

等等。

在分散式的鉴权中,有个问题需要注意,登录的标准必须是一致的,也就是说鉴权中心要提供登录页给没登陆的用户首次登录使用,用户提交登录请求后的数据解析逻辑、用户信息的数据组织方式,这些内容各个应用上都必须是一致的。为了标准化,最好的方式式放在一起进行统一维护,将整个鉴权能力单独抽出来做成一个依赖,每个应用引入统一的依赖做配置使用即可。怕就怕各写各的,然后分叉了。

2.2.集中鉴权

集中式的鉴权,即将鉴权统一放到一起去,比如使用:

  1. CAS
  2. 网关。

前文都说过集中式的鉴权会对鉴权中心造成压力,为什么这里还要说集中式的喃?那是因为如果你用了网关,本来所有流量就会走网关上过,也没办法分散压力了,其次,集中式的方案中,授权节点一般都对吞吐量做了优化的,是能抗住较大吞吐量的。

1.CAS

CAS是耶鲁大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法。CAS中有一个独立部署的鉴权中心(cas server),在客户端上引入依赖然后配置一下,可以使得客户端成为cas client,client和server之间依靠凭证来进行鉴权。cas的具体使用博主会在后面单独出文,网上的相关资料也是车载斗量,需要现在使用的同学,自己去搜一下即可。

2.网关

如果我们用的是带有网关的微服务架构,那么可以利用类似于gateway之类的网关自带的请求分类拦截处理的能力来进行统一鉴权。

以gateway为例,gateway是以一条条路由来处理一类类的请求的。一条理由断言和过滤器组成,断言负责进行请求的判断,判断结果为true的请求才会被放行。所以我们可以通过自定义断言的方式来进行鉴权,自定义断言可以去开源社区或者官方文档上查一下相关的实现。当然处了自定义断言,也可以在gateway上用spring security来实现鉴权,具体的方案就看业务场景的需要了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/88220.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity3D C# 反射与特性的配合使用

需求分析 情况: 假如我们是一个动物园的管理员,我们需要统计园内的所有动物和动物的行为。 举例: 现在园区内有猫、狗和鸡。猫对应的行为是喵喵喵和卖萌,狗对应狗吠和干饭,鸡对应篮球和打鸣那么这时候我要统计这些&a…

Lyapunov optimization 李雅普诺夫优化

文章目录 正文引言Lyapunov drift for queueing networks 排队网络的Lyapunov漂移Quadratic Lyapunov functions 二次李雅普诺夫函数Bounding the Lyapunov drift 李亚普诺夫漂移的边界A basic Lyapunov drift theorem 一个基本的李雅普诺夫漂移定理 Lyapunov optimization for…

【C++】手撕string(string的模拟实现)

手撕string目录: 一、 Member functions 1.1 constructor 1.2 Copy constructor(代码重构:传统写法和现代写法) 1.3 operator(代码重构:现代写法超级牛逼) 1.4 destructor 二、Other mem…

【算法思想】贪心

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

探索ClickHouse——使用Projection加速查询

在测试Projection之前,我们需要先创建一张表,并导入大量数据。 我们可以直接使用指令,从URL指向的文件中获取内容并导入表。但是担心网络不稳定,我们先将文件下载下来。 下载文件 wget wget http://prod.publicdata.landregistr…

项目开发中使用Date和LocalDateTime处理日期

文章目录 项目开发中使用Date和LocalDateTime处理日期Date类型验证数据库表设计(年月日情况)实体类说明映射文件xml响应展示情况注意事项 LocalDateTime验证数据库设计实体类日期类型动态SQL日期类型响应展示情况 总结 项目开发中使用Date和LocalDateTim…

Windows10/11显示文件扩展名 修改文件后缀名教程

前言 写这篇文章的原因是由于我分享的教程中的文件、安装包基本都是存在阿里云盘的,下载后需要改后缀名才能使用。 但是好多同学不会改。。 Windows 10 随便打开一个文件夹,在上方工具栏点击 “查看”点击 “查看” 后下方会显示更详细的工具栏然后点…

SPA项目之登录注册--请求问题(POSTGET)以及跨域问题

🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于VueElementUI的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一.ElementUI是什么 💡…

ubuntu下用pycharm专业版连接AI服务器及其docker环境

一:用pycharm专业版连接AI服务器 1、首先在自己电脑上新建一个文件夹,后续用于映射服务器上自己所要用的项目文件 2、用pycharm专业版打开该文件夹,作为一个项目打开 3、然后在工具->部署->配置 4、配置中形式如下: 点击左…

Docker 入门 (详细命令讲解)

1.1 容器简介 1.1.1 什么是 Linux 容器 Linux容器是与系统其他部分隔离开的一系列进程,从另一个镜像运行,并由该镜像提供支持进程所需的全部文件。容器提供的镜像包含了应用的所有依赖项,因而在从开发到测试再到生产的整个过程中&#xff0…

五、点击切换、滚动切换、键盘切换

简介 通过事件改变当前展示的信息组件,交互的事件有点击上下切换、鼠标轮动上下切换、键盘上下键切换。欢迎访问个人的简历网站预览效果 本章涉及修改与新增的文件:App.vue、public 一、鼠标点击上下箭头切换 <template><div class="app-background"…

Nodejs基于Vue.js编程语言在线学习平台的设计与实现5y4p2

本编程语言在线学习平台是为了提高用户查阅信息的效率和管理人员管理信息的工作效率&#xff0c;可以快速存储大量数据&#xff0c;还有信息检索功能&#xff0c;这大大的满足了用户和管理员这二者的需求。操作简单易懂&#xff0c;合理分析各个模块的功能&#xff0c;尽可能优…

【慕伏白教程】 Linux 深度学习服务器配置指北

文章目录 镜像烧录系统安装系统配置常用包安装 镜像烧录 下载 Ubuntu 镜像 Ubuntu 桌面版 下载烧录工具 balenaEtcher 准备至少 8G 的 空白U盘 开始烧录 系统安装 开机进入BIOS&#xff0c;修改U盘为第一启动 选择 Try or Install Ubuntu 往下拉&#xff0c;选择 中文&a…

Redis 线程模式

Redis 是单线程吗&#xff1f; Redis 单线程指的是 [接收客户端请求 -> 解析请求 -> 进行数据读写操作 -> 发送数据给客户端] 这个过程是由一个线程 (主线程) 来完成的&#xff0c;这也是常说的 Redis 是单线程的原因。 但是 &#xff0c;Redis 程序不是单线程的&am…

OpenCV 实现 SIFT→SURF 算法关键点检测实现

目录 1&#xff0c;SIFT算法原理 1.1&#xff0c;基本流程 1.1.1 尺度空间极值检测 1.1.2 关键点定位 1.1.3 关键点方向确定 1.1.4 关键点描述 1.1.5 总结 1.2 SURF原理 2 代码实现 3 结果展示 4&#xff0c;你肯定会遇到报错 cv2.error: OpenCV(3.4.8) C…

Spring面试题8:面试官:说一说Spring的BeanFactory

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:说一说Spring的BeanFactory Spring的BeanFactory是Spring框架的核心容器,负责管理和创建Bean对象。它是一个工厂类,用于实例化、配置和管理Bean的…

nodejs+vue 医院病历管理系统

系统使用权限分别包括管理员、病人和医生&#xff0c;其中管理员拥有着最大的权限&#xff0c;同时管理员的功能模块也是最多的&#xff0c;管理员可以对系统上所有信息进行管理。用户可以修改个人信息&#xff0c;对医院病历信息进行查询&#xff0c;对住院信息进行添加、修改…

权威认可!安全狗获CNVD“漏洞信息报送贡献单位”殊荣

9月24日&#xff0c;国家信息安全漏洞共享平台公布了2022年度CNVD支撑单位年度工作情况及优秀单位个人表彰名单。 作为国内云原生安全领导厂商&#xff0c;安全狗入选漏洞信息报送贡献单位。 厦门服云信息科技有限公司&#xff08;品牌名&#xff1a;安全狗&#xff09;成立于…

tp5连接多个数据库

一、如果你的主数据库配置文件都在config.php里 直接在config.php中中定义db2&#xff1a; 控制器中打印一下&#xff1a; <?php namespace app\index\controller; use think\Controller; use think\Db; use think\Request; class Index extends Controller {public fun…

win10,WSL的Ubuntu配python3.7手记

1.装linux 先在windows上安装WSL版本的Ubuntu Windows10系统安装Ubuntu子系统_哔哩哔哩_bilibili &#xff08;WSL2什么的一直没搞清楚&#xff09; 图形界面会出一些问题&#xff0c;注意勾选ccsm出的界面设置 win10安装Ubuntu16.04子系统&#xff0c;并开启桌面环境_win…