SpringSecurity之基础认知

news2024/11/27 8:45:53

前言

之前一直说开一个SpringSecurity的专栏,今天抽空整理一下,准备开始更新。

也欢迎大家订阅此专栏!

什么是SpringSecurity?

Spring是非常成功的Java应用框架,目前是非常主流的开发框架。Spring Securtiy正是我们Spring家族的一员。它基于Spring框架,为我们提供了关于Web应用安全性的一套完整的解决方案

一般而言,Web应用的安全性包括了用户认证(Authentication)以及用户授权(Authorization)这么两个部分,这也正是我们今天所讲解的Spring Security的两大核心功能。

1、用户认证:指的是验证某个用户是否是我们系统中的合法用户,即用户能否对心痛进行访问。认证的前提条件就是用户提供用户名以及密码。通过我们系统来完成对其提供用户名和密码的校验,是否通过。也就是我们常说的系统登录功能中的校验。

2、用户授权:指的是用户是否有权限进行访问和操作。在我们的系统中,往往不同的用户有着不同的权限。比如对于菜单的操作,有的用户可以读取,有的用户可以进行新增。这种不同的权限就是我们所说的授权。通常,系统会给用户分配相对应的角色,然后再通过角色的权限来给用户赋能。也就是我们系统中去判定用户是否有权限去访问或者操作系统。

SpringSecurity的发展史

Spring Security开始于2003年年底,““spring的acegi安全系统”。 起因是Spring开发者邮件列表中的一个问题,有人提问是否考虑提供一个基于spring的安全实现。

在当时Spring的社区相对较小(是和今天的规模比!),其实Spring本身是从2003年初才作为一个sourceforge的项目出现的。 对这个问题的回应是,这的确是一个值得研究的领域,虽然限于时间问题阻碍了对它的继续研究。 有鉴于此,一个简单的安全实现建立起来了,但没有发布。 几周之后,spring社区的其他成员询问安全问题,代码就被提供给了他们。

随后又有人请求,在2004年一月左右,有20万人在使用这些代码。 另外一些人加入到这些先行者中来,并建议在sourceforge上建立一个项目,项目在2004年3月正式建立起来。

在早期,项目本身没有自己的认证模块。 认证过程都是依赖容器管理安全的,而acegi则注重授权。 这在一开始是合适的,但随着越来越多用户要求提供额外的容器支持,基于容器认证的限制就显现出来了。

还有一个有关的问题,向容器的classpath中添加新jar,常常让最终用户感到困惑,又容易出现配置错误。 随后acegi加入了认证服务。大约一年后,acegi成为spring的官方子项目。 经过了两年半在许多生产软件项目中的活跃使用和数以万计的改善和社区的贡献,1.0.0最终版本发布于2006年5月。 acegi在2007年年底,正式成为spring组合项目,被更名为“Spring Security”。

同类产品对比

下面分别从各自的特点说明一下Shiro和SpringSecurity

SpringSecurityShiro

1、Spring技术栈的加持

2、和Spring完美的无缝整合
3、权限控制比较全面
4、专门针对Web开发而设计

        旧版本不能脱离Web环境而使用

        新版本对整体框架进行分层抽取,形成了核心模块和web模块,引入核心模块就能够完5全脱离Web环境单独使用

5重量级框架

1、Apache下的轻量权限控制框架

2、理念是把复杂的事情变得简单,对性能有更高的要求的互联网应用比较友好

3、通用性比较好

        不局限于Web环境,可以脱离Web使用

        在Web环境下一些特定的需求是需要我们定制代码的开发

总结

Spring Security 是 Spring 家族中的一个安全管理框架,其实,在 Spring Boot 出现之 前,Spring Security 它已经发展了多年了,但是使用的并不多,安全管理框架这个领域,一直 是 Shiro 的天下。

相对于 Shiro,在 SSM 中整合 Spring Security 都是比较繁琐,所以,Spring Security 虽然功能比 Shiro 强大,但是使用的反而没有 Shiro 多(Shiro 虽然功能没有 Spring Security 多,但是对于大部分项目而言,Shiro 也够用了)。

自从 Spring Boot 出现之后,Spring Boot 对于 Spring Security 提供了自动化配置的 案,可以使用更少的配置来使用我们的Spring Security框架。

因此,目前,常见的安全管理技术栈的组合是这样的:

• SSM + Shiro

• Spring Boot/Spring Cloud + Spring Security

以上只是一个推荐的组合而已,如果单纯从技术上来说,无论怎么组合,都是可以运行的。

模块划分

 

前置知识

1、掌握Spring框架

2、掌握SpringBoot的基本使用

3、掌握JavaWeb的相关技术(比如过滤器)

好了,关于SpringSecurity之基础认知就先到这里。

欢迎大家点击下方卡片,关注《coder练习生》

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

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

相关文章

RPC 漫谈: 限流问题

RPC 漫谈: 限流问题 微服务之间的 RPC 调用往往会使用到限流功能,但是很多时候我们都是用很简单的限流策略,亦或是工程师拍脑袋定一个限流值。 这篇文章主要讨论在 RPC 限流中,当前存在的问题和可能的解决思路。 为什么需要限流…

Tailwind CSS 小案例,创建漂亮的收藏卡片列表

作为人类,我们有一种天生的倾向,喜欢收集不同的物品,并根据兴趣将它们分组。从邮票到书籍,人们收集和分组的物品种类繁多。定义上,收藏是一组事物,通常是由某个人创建的。例如,很多孩子会收集漫…

Docker In Docker

Docker in Docker 适用场景 ​ 在 CI 中,通常会有一个 CI Engine 负责解析流程,控制整个构建过程,而将真正的构建交给 Agent 去完成。例如,Jenkins 、GitLab 均是如此 同时 Agent 是动态的,构建时才需要,…

查询淘宝商品历史价格(用Python记录商品每天价格变化)

taobao.item_history_price-获取淘宝天猫历史价格接口 思路: 第一步抓取商品的价格存入 Python 自带的 SQLite 数据库每天定时抓取商品价格使用 pyecharts 模块绘制价格折线图,让低价一目了然 接口说明:通过接口可以拿到整个平台&#xff0…

Tomcat源码:Container接口

参考资料: 《Tomcat - Request请求处理: Container设计》 《Tomcat - Container容器之Engine:StandardEngine》 前文: 《Tomcat源码:启动类Bootstrap与Catalina的加载》 《Tomcat源码:容器的生命周期管理与事件监…

matplotlib绘图看这篇就够了

导入matplotlib第三方库此外,在matplotlib中我们可以只输入y轴,即为只输入一个数组我们也可以输出,x不为必要条件。而且也可以使用plt.xticks()函数进行设置x轴的label。import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [Si…

注意力机制中Q和K相乘的意义是什么?为什么Q和K相乘就可以得到它们之间的相似性/权重矩阵呢?

为什么query和key相乘就能得到学生和教师的相似度呢?它的内部原理是什么? 在注意力机制中,query 和 key 相乘得到的相似度其实是通过计算两个向量之间的点积来实现的。具体而言,我们将 query 和 key 进行点积运算后【这里的点积运算可以看作…

从C出发 23 --- 函数专题练习

A:我们可以将 main 理解为操作系统调用的函数,操作系统运行一个应用程序时,就去调用这个应用程序里面的main函数 B: 函数中只能定义变量,定义的变量叫局部变量 C: 从操作系统的角度来看 C 并不一定正确,因为从技术角…

Cadence OrCAD Capture 层次化电路设计展开的方法

🏡《总目录》   🏡《宝典目录》   🏡《上级目录》 目录1,概述2,展开方法3,总结B站关注“硬小二”浏览更多演示视频 1,概述 典型的层次化设计是指顶层模块中,调用1个电路模块超过…

Java中的并发容器

Java 中的 并发容器 1.List 类 list类 线程安全的主要有 Vector 与 CopyOnWriteArrayList a). Vector Vector 相当于在 原有 ArrayList类的基础上将所有方法 变成同步方法 同样的操作还有 Collections.synchronizedList() 方法,将原有Lis…

自训练Self-Training学习总结

一、自训练(Self-training) Self-training是最简单的半监督方法之一,其主要思想是找到一种方法,用未标记的数据集来扩充已标记的数据集。算法流程如下: 首先,利用已标记的数据来训练一个好的模型&#xf…

ch04-损失优化

ch04-损失优化0.引言1.权值初始化1.1. 梯度消失与爆炸1.2. Xavier 初始化1.3. Kaiming 初始化1.4. 常用的权值始化方法1.5. nn.init.calculate_gain1.6. 总结2.损失函数 (一)2.1. 损失函数的概念2.2. 交叉熵损失函数 nn.CrossEntropyLoss2.3. NLL/BCE/BCEWithLogits Loss2.4. 总…

什么原因导致了儿童自闭症?跟父母养育有关吗?

导致儿童自闭症的原因是什么?这和父母的抚养有关吗?学习教育孩子的方法,让孩子快乐健康地成长,是家庭和孩子生活中的一件重要事情。不良的环境和错误的教育会导致儿童自闭症,这是真的吗?自闭症,…

1、vscode搭建C++开发环境及一些配置文件的含义

文章目录一、vscode搭建开发环境1、下载和配置MinGW-w64 编译器套件2、安装到电脑中3、配置环境变量4、测试是否安装成功5、vscode上安装C/C插件二 、配置编译环境时各个文件的含义1、task.json:此文件告诉VS代码如何构建(编译)程序&#xff…

如何利用 IP 归属地查询 API 精准锁定用户位置

引言 在互联网时代,IP 地址扮演着非常重要的角色,它可以帮助我们追踪网站访问者、优化网络服务等等。而 IP 归属地则更进一步,它可以帮助我们精确地定位 IP 地址所在的地理位置,为数据分析、网络安全、市场调研等领域提供了极大的…

「业务架构」需求工程——需求验证(第4部分)

确保规定要求满足客户需求的过程。需求验证它是一个确保特定需求满足客户需求的过程。它关心的是找到需求中的问题。当这些问题在后期发现时,或者在系统投入使用后,这些问题会导致大量的返工成本。通过系统变更来修复需求问题的成本通常比修复设计或代码…

如何选择 O2OA (翱途) 开发平台的部署架构?

O2OA (翱途) 开发平台 [下称 O2OA 开发平台或者 O2OA] 支持公有云,私有云和混合云部署,也支持复杂的网络结构下的分布式部署。本篇主要介绍 O2OA (翱途) 开发平台支持的部署环境以及常用的集群部署架构。 软硬件环境说明 支持的云化平台: …

微信小程序-组件化

微信小程序-组件化 自定义组件 业务描述:代码中有多处需要引用同一段代码,需要把他封装成一个组件 流程 在根目录创建components用于存放通用组件在创建组件文件夹选择新建components 会自动生成4个文件json文件 会出现"component": true,…

Talk预告 | 浙江大学乔硕斐:语言模型提示推理综述

本期为TechBeat人工智能社区第480期线上Talk! 北京时间3月9日(周四)20:00,浙江大学计算机科学与技术硕士——乔硕斐的Talk将准时在TechBeat人工智能社区开播! 他与大家分享的主题是: “语言模型提示推理综述 ”,届时将分享对语言…

知识点学习登记备份信息

知识点记录 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8ovilnIi-1681441105895)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211228090433836.png)] [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上…