【JAVA EE】详解单点登录

news2024/11/28 13:47:53

作者简介

目录

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.coloradmin.cn/o/1041963.html

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

相关文章

C# 读取Execl文件3种方法

方法 1,使用OLEDB可以对excel文件进行读取 1.1C#提供的数据连接有哪些 对于不同的.net数据提供者,ADO.NET采用不同的Connection对象连接数据库。这些Connection对我们屏蔽了具体的实现细节,并提供了一种统一的实现方法。 Connection类有四…

ElementUI之首页导航及左侧菜单(模拟实现)

目录 ​编辑 前言 一、mockjs简介 1. 什么是mockjs 2. mockjs的用途 3. 运用mockjs的优势 二、安装与配置mockjs 1. 安装mockjs 2. 引入mockjs 2.1 dev.env.js 2.2 prod.env.js 2.3 main.js 三、mockjs的使用 1. 将资源中的mock文件夹复制到src目录下 2. 点击登…

Java SimpleDateFormat格式化日期时间

java.text.SimpleDateFormat 格式化日期时间, 参考 api 说明 Overview (Java Platform SE 8 ) Examples The following examples show how date and time patterns are interpreted in the U.S. locale. The given date and time are 2001-07-04 12:08:56 local t…

Normalization总结(BN/LN/WN/IN/GN)

一、简介 在深度学习领域,Normalization用得很多,BN(Batch Normalization)于2015年由 Google 提出,开创了Normalization 先河;2016年出了LN(layer normalization)和IN(I…

基于UDP协议的网络服务器的模拟实现

目录 服务端类UdpServer的模拟实现 服务端类UdpServer的成员变量 服务端类UdpServer的构造函数、初始化函数initServer、析构函数 服务端类UdpServer的start函数 服务端类UdpServer的整体代码(即udp_server.h文件的整体代码) 基于服务端类UdpServe…

不同的jdk版本编译得到的class文件中的信息是不是会不一样

不同的jdk版本编译得到的class文件中的信息是不是会不一样 不同的 JDK 版本编译得到的 .class 文件中的信息可能会有所不同。主要的差异可能出现在以下几个方面: 类文件版本号:随着 JDK 版本的升级,类文件的版本号也会发生变化。例如&#x…

左神高级进阶班6(利用快排的partition过程、BFPRT、动态规划的斜率优化技巧、二叉树的递归套路、完美洗牌问题)

目录 【案例1 利用快排的partition过程,BFPRT】 【题目描述】 【思路解析】 【代码实现】 【案例2 动态规划的斜率优化技巧】 【题目描述】 【思路解析】 【代码实现】 【案例3 二叉树的递归套路】 【题目描述】 【搜索二叉树定义】 【思路解析】 【代…

BERT 快速理解——思路简单描述

定义: BERT(Bidirectional Encoder Representations from Transformers)是一种预训练的语言模型,它基于Transformer架构,通过在大规模的未标记文本上进行训练来学习通用的语言表示。 输入 在BERT中,输入…

一篇博客学会系列(1) —— C语言中所有字符串函数以及内存函数的使用和注意事项

目录 1、求字符串长度函数 1.1、strlen 2、字符串拷贝(cpy)、拼接(cat)、比较(cmp)函数 2.1、长度不受限制的字符串函数 2.1.1、strcpy 2.1.2、strcat 2.1.3、strcmp 2.2、长度受限制的字符串函数 2.2.1、strncpy 2.2.2、strncat 2.2.3、strncmp 3、字符串查找函数…

Java 大厂八股文面试专题-JVM相关面试题 垃圾回收算法 GC JVM调优

Java 大厂八股文面试专题-JVM相关面试题 类加载器_软工菜鸡的博客-CSDN博客 3 垃圾收回 3.1 简述Java垃圾回收机制?(GC是什么?为什么要GC) 难易程度:☆☆☆ 出现频率:☆☆☆ 为了让程序员更专注于代码的实现…

如何使用iPhone15在办公室观看家里电脑上的4k电影,实现公网访问本地群晖!

如何使用iPhone15在办公室观看家里电脑上的4k电影? 文章目录 如何使用iPhone15在办公室观看家里电脑上的4k电影?1.使用环境要求:2.下载群晖videostation:3.公网访问本地群晖videostation中的电影:4.公网条件下使用电脑…

【Java基础-JDK21新特性】它发任它发,我用java8

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

黑马JVM总结(二十四)

(1)练习-分析a a:先执行iload1:把数据读入到操作数栈中 iinc:把局部变量表中的1号曹位做一个自增,他在局部变量表中发生的并没有影响到操作数栈 a:限制性自增在做iload 自增变成12 iload把12读取到操作数…

Mac电脑信息大纲记录软件 OmniOutliner 5 Pro for Mac中文

OmniOutliner 5 Pro是一款专业级的Mac大纲制作工具,它可以帮助用户更好地组织和管理信息,以及制作精美的大纲。以下是OmniOutliner 5 Pro的主要功能和特点: 强大的大纲组织和管理功能。OmniOutliner 5 Pro为用户提供了多层次的大纲结构&…

Python语法之条件语句(很详细)

目录 Python条件语句的介绍 定义 if的语法和实例(最基本的) 语法 gif动态图展示 具体实例 实现思路: if-elif-else的语法和实例(最基本的) 语法 具体实例 实现思路: 判断需要多个条件需同时判断语法和实例(最基…

利用Axure RP和cpolar内网穿透实现公网访问本地web网页

AxureRP制作静态站点发布互联网,内网穿透实现公网访问 文章目录 AxureRP制作静态站点发布互联网,内网穿透实现公网访问前言1.在AxureRP中生成HTML文件2.配置IIS服务3.添加防火墙安全策略4.使用cpolar内网穿透实现公网访问4.1 登录cpolar web ui管理界面4…

最详细的next国际化方案

实现效果 : 根据浏览器语言判断和手动切换(两种切换模式) 实现方法 1.下载安装包 (next-i18next react-i18next i18next) yarn add next-i18next react-i18next i18next 2.在根目录下创建文件(next-i18next.config.js) const path require("path");module.expo…

MATLAB 安装额外工具包

接下里即可搜索并安装 “额外工具包”

python多继承构造函数声明问题

前言: 嗨喽~大家好呀,这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 背景 有场景分别定义两组逻辑,随后有统一入口做基类属性的整合 其中两组逻辑的积累构造函数定义入参不同 设计类继承图如&#…

【深度学习】【Opencv】Python/C++调用onnx模型【基础】

【深度学习】【Opencv】python/C调用onnx模型【基础】 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【深度学习】【Opencv】python/C调用onnx模型【基础】前言Python版本OpenCVWindows平台安装OpenCVopencv调用onnx模型 C版本OpenCVWindows平…