Spring Security3.0版本

news2024/12/27 18:14:50

前言:

核心: A >>  ? >> B

?代表判断层,由Security实现

 

这是之前的版本浓缩,现在3.0版本添加了更匹配的内容描写,匹配了mvc模式

非mvc模式       核心:client(用户)>> filter(过滤器)>> servlet(业务)

mvc模式f9b1f13f60b34e25b3d524087f6acefe.png

ps:不要在意图片中的英文,有拼错的

正式开始


《等于号,不一定是等于,它可以是赋值,它可以是对标识符的一种定义》

<<

Filter(过滤器)= 包含特殊条件的判断

FilterChain(过滤链)= 包含多个特殊条件的判断 = Filter1 + Filter2 + Filter3 

FilterChainProxy(过滤链代理)= 根据特定需求而使用的FilterChain(过滤链)

a1ece19c17a14f119f9eebfffb205702.png

>>


 

基于官方文档的Security3.0配置

Hello Spring Security :: Spring Security Reference (springdoc.cn)

第一个大步骤(快速入门)

第一步:添加依赖(SpringBoot3 - Maven)

<dependencies>
	<!-- ... 其他依赖元素 ... -->
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-security</artifactId>
	</dependency>
</dependencies>

第二步:运行

20db4856f06647c1a9f6aedb0ebdf938.png

第一条横线,说明你成果导入了依赖

第二天横线,是用来进行一个依赖验证的访问端口

第三步:打开浏览器,访问端口

输入Tomcat端口号:127.0.0.1:8084(端口号)  /  localhost:8084(端口号)

注意:当你不知道端口号时,根据第二条横线Tomcat后面跟着的  数字(http) ,数字就是端口号(一般来说)

2ce7dfcece7f499f8efecbfc514cd354.png

第四步:登录

根据第一条横线password冒号后面的那一大串,进行一个密码输入

username输入什么,Security默认提供的user

6ce2aa653be346468e34e3471ed0337a.png

注意:password冒号后面有一个空格,不要复制

第五步:登陆成功

2ce5acd72ad9466c92e790e0789449ab.png

登录失败

9499ac25439f4bf2b20120305a0bdd8c.png

流程图(最基本的登录功能)

711ee2d9f1dc4ff8b33e99cf4d3b9201.png

 

看到这里,您已经完成了最简单的Security入门~

接下在会在这个基础上一步步加深

第二个大步骤(默认配置)

继续看文档

@EnableWebSecurity
@Configuration
public class DefaultSecurityConfig {
    @Bean
    @ConditionalOnMissingBean(UserDetailsService.class)
    InMemoryUserDetailsManager inMemoryUserDetailsManager() {
        String generatedPassword = // ...;
        return new InMemoryUserDetailsManager(User.withUsername("user")
                .password(generatedPassword).roles("ROLE_USER").build());
    }

    @Bean
    @ConditionalOnMissingBean(AuthenticationEventPublisher.class)
    DefaultAuthenticationEventPublisher defaultAuthenticationEventPublisher(ApplicationEventPublisher delegate) {
        return new DefaultAuthenticationEventPublisher(delegate);
    }
}

这一大串代码是真的入人眼,虽然看不懂,但是不影响后续的发展

 

运行时异常

自动配置

Spring Boot 和 Spring Security 的默认安排在运行时提供了以下行为:

  • 任何端点(包括 Boot 的 /error 端点)都需要一个认证的用户。

  • 在启动时用生成的密码 注册一个默认用户(密码被记录到控制台;在前面的例子中,密码是 8e557245-73e2-4286-969a-ff57fe326336)。

  • 用 BCrypt 以及其他方式保护密码存储。

  • 提供基于表单的 登录 和 注销 流程。

  • 对 基于表单 的登录以及 HTTP Basic 进行认证。

  • 提供内容协商;对于web请求,重定向到登录页面;对于服务请求,返回 401 Unauthorized

  • 减缓 CSRF 攻击。

  • 减缓 Session Fixation 攻击。

  • 写入 Strict-Transport-Security,以 确保HTTPS。

  • 写入 X-Content-Type-Options 以减缓 嗅探攻击。

  • 写入保护认证资源的 Cache Control header。

  • 写入 X-Frame-Options,以缓解 点击劫持 的情况。

  • 与 HttpServletRequest 的认证方法 整合。

  • 发布 认证成功和失败的事件。

目的:

了解 Spring Boot 是如何与 Spring Security 协调来实现这一目标的,会有帮助。看看 Boot 的安全自动配置,它做了以下工作(为了说明问题而简化)

第一块官方介绍

  1. 添加了 @EnableWebSecurity 注解。(在其他方面,它将 Spring Security 的默认 Filter chain 作为 @Bean 发布)。

  2. 发布一个 UserDetailsService @Bean,其用户名是 user,密码是随机生成的,会被记录到控制台。

  3. 发布一个 AuthenticationEventPublisher @Bean,用于发布认证事件。

第二块官方介绍

Spring Boot 将任何以 @Bean 形式发布的 Filter 添加到应用程序的 filter chain 中。这意味着,结合 Spring Boot 使用 @EnableWebSecurity 会自动为每个请求注册 Spring Security 的 filter chain。

 

将这一大块的内容分成四个大部分来看,其实不算太复杂

第一部分(自动配置):从上到下,挨个运行

第一条:任何端点都需要一个认证用户

验证:

第一步:刷新浏览器(清除之前步骤的登录状态)

bd86d2ffb37f417f94ba5eab8e7226e7.png

从新回到这个页面

在上面的路径   /后面随便输入内容,并回车

a88f3aa48a614a9297460fc617a189c6.png

它自动回到了我们的登录页面

2575e376d33644ec9740ebae08b2bf38.png

第二步:完成登录

输入账号密码,完成登录会自动跳转到这个页面

48a36e4051ee4a508bd0feee8ebb69ca.png

第三步:复刻第一步,这个登录成功后没有/,自己手动打上去

a930a80a2b77463e88880106adc0e085.png

回车

fa756f77c6b74706a78d8cc47d3b46e7.png

并没有回到登录界面,路径显示的是我们输入的内容

结论

当没有验证时,访问任何端点都会强制回到登录页面

 

完美页面案例:淘宝 (alicdn.com)京东(JD.COM)-正品低价、品质保障、配送及时、轻松购物!淘宝 (alicdn.com)

你可以尝试不登陆去浏览京东,浏览3分钟不到,它就会自动跳转到登录页面,甚至想单看一个商品介绍,因为没登陆的缘故会自动跳转到登录页面,很烦,严重影响了我的购买欲望

淘宝也有这个,但是不明显

第二条:在启动时用生成的密码 注册一个默认用户(密码被记录到控制台;在前面的例子中,密码是 8e557245-73e2-4286-969a-ff57fe326336)。

这个在第一个大步骤里就有验证,第一条横线的password和默认的user账号

 

第三条:用 BCrypt 以及其他方式保护密码存储。

虽然没找到对应的代码,但是有一点可以确定

39b1edfe18e84136a045c2b1f14f91a8.png

它们两在同一个包里面,security里面

 

第四条:提供基于表单的 登录 和 注销 流程。

只要启动服务,输入端口号确实提供了登录,那么注销呢?

第一步:在访问路径上面输入 /logout

f037563228194ad290f3cee64e741cae.png

第二步:点击logOut就注销

 

前四条很明细的可以验证,后面几条在本地应用下验证不算特别明细,而且源码太多了,也就不做验证了

 

疑问:端点和端口有什么区别?

  • Requires an authenticated user for any endpoint (including Boot’s /error endpoint)

端口的英文是port

端点的英文是end-point

怎么区分他们,用报错来看,没错,用报错来补充定义是我觉得一个十分简单实用的方法

这些名词发展了这么久,英文,中文,在通过二手大佬翻译等等,导致词的含义早已不是最开始的含义,对着翻译去找难度不亚于我自己命名一个专属名字,所以用报错补充定义是一个十分好用的方法

这期先到这里,3.0.1更新具体报错的区分

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

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

相关文章

医院该如何应对网络安全?

在线医生咨询受到很多人的关注&#xff0c;互联网医疗行业的未来发展空间巨大&#xff0c;但随着医院信息化建设高速发展 医院积累了大量的患者基本信息、化验结果、电子处方、生产数据和运营信息等数据 这些数据涉及公民隐私、医院运作和发展等多因素&#xff0c;医疗行业办…

客户关系管理系统

CRM系统是协调企业与顾客间在销售、营销和服务关系&#xff0c;提升企业管理水平&#xff0c;向客户提供创新、个性化服务的过程。 最终目标是吸引新客户、保留老客户以及将已有客户转为忠实客户&#xff0c;增加市场份额。 CRM系统开发团队应该深谙“客户关系”的内涵&#xf…

17-java网络编程

目录 第17章 网络编程 17.1 软件结构 17.2 网络通信三要素 17.2.1 IP地址和域名 1、IP地址 2、域名 17.2.2 端口号 17.2.3 网络通信协议 17.3 TCP与UDP协议 17.3.1 UDP协议 17.3.2 TCP协议 1、三次握手 2、四次挥手 17.4 网络编程API 17.4.1 InetAddress类 17.4…

dubbo复习:(19)dubbo 和spring整合(老古董)

一、服务端依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM…

nginx的安装001

Nginx是一款高性能的HTTP和反向代理服务器&#xff0c;以及邮件代理服务器&#xff0c;由 Igor Sysoev 开发并公开发布于2004年。Nginx以其高并发处理能力、低内存消耗和稳定性著称&#xff0c;特别适合部署在高流量的网站上。 操作系统&#xff1a; CentOS Stream 9 安装步骤…

在线图片文字识别转换的软件,分享3个热门的软件!

在数字化时代&#xff0c;图片中的文字信息提取变得愈发重要。无论是从扫描文档、照片还是其他图像中&#xff0c;我们都需要快速、准确地获取其中的文字内容。而在线图片文字识别转换工具&#xff0c;正是解决这一问题的得力助手。本文将为您盘点目前市场上热门的在线图片文字…

DNF手游6月5日更新亮点全解析!

在即将到来的6月5日更新中&#xff0c;《DNF手游》将迎来一系列令人振奋的新内容和玩法。本文将详细介绍本次更新的主要内容&#xff0c;包括新增的组队挑战玩法“罗特斯入门团本”&#xff0c;新星使宠物的推出&#xff0c;宠物进化功能的开放&#xff0c;以及六月下旬即将落地…

初识Spring Boot:构建项目结构与组件解析

目录 前言 第一点&#xff1a;项目的结构 第二点&#xff1a;controller类的创建与使用&#xff08;构造器&#xff09; 第二点&#xff1a;service类的创建与使用&#xff08;逻辑层&#xff09; 第三点&#xff1a;Mapper类的创建与使用(数据操作) 总结 前言 在进行Sp…

flask网页开发之旅:路由与视图函数详解

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言&#xff1a;掌握flask网页开发的钥匙 二、路由&#xff1a;连接用户请求与网页内容…

发布-订阅(ZeroMQ) C++实现

1、目的 自从发了《发布-订阅&#xff08;Publish-Subscribe&#xff09;C实现》博文&#xff0c;收到不少反馈&#xff1a;主要的问题就是无法跨主机使用。 本次实现主要解决&#xff1a; 简化ZeroMQ的开发过程&#xff1b;尽可能简化发布订阅的API调用&#xff1b;订阅者消…

【计算机毕设】基于SpringBoot的学生心理咨询评估系统设计与实现 - 源码免费(私信领取)

免费领取源码 &#xff5c; 项目完整可运行 &#xff5c; v&#xff1a;chengn7890 诚招源码校园代理&#xff01; 1. 研究目的 随着社会的快速发展和竞争压力的增加&#xff0c;学生心理健康问题日益突出。设计和实现一个基于SpringBoot的学生心理咨询评估系统&#xff0c;旨在…

在Ubuntu乌班图上安装Docker

最近在学习乌班图相关的内容&#xff0c;找了一些文档安装的都是报错的&#xff0c;于是记录一下学习过程&#xff0c;希望也能帮助有缘人&#xff0c;首先查看乌班图的系统版本&#xff0c;我的是如下的&#xff1a; cat /proc/version以下是在Ubuntu 20.04版本上安装Docker。…

LeetCode739:每日温度

题目描述 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来代替。 解题思想 使用单…

Windows Server安全配置

Windows Server操作系统安全配置&#xff0c;加固windows server。 1、密码安全 设置密码最小长度为10 开始-管理工具-本地安全策略-安全设置-账户策略-密码策略&#xff0c;修改密码长度最小值为10。 2、密码使用期限 设置密码最长使用期限为30天 开始-管理工具-本地安全策…

list 的实现

目录 list 结点类 结点类的构造函数 list的尾插尾删 list的头插头删 迭代器 运算符重载 --运算符重载 和! 运算符重载 * 和 -> 运算符重载 list 的insert list的erase list list实际上是一个带头双向循环链表,要实现list,则首先需要实现一个结点类,而一个结点需要…

【Python】解决Python错误报错:IndexError: tuple index out of range

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

宝塔 nginx 配置负载均衡 upstream

nginx 主配置文件加入 upstream myapp1 {server 192.168.124.101:5051;server 192.168.124.102:5052;server 192.168.124.111:5050;}站点配置文件中加入 location / {proxy_pass http://myapp1;}80端口映射到外网域名配置方法 加入红框中的代码 upstream myapp3 {server 192.16…

物联边缘网关有哪些功能?物联边缘网关在工业方向的应用-天拓四方

随着物联网技术的快速发展&#xff0c;越来越多的设备和系统正在接入到网络中&#xff0c;形成了一个庞大的智能生态系统。在这个系统中&#xff0c;物联边缘网关扮演着至关重要的角色&#xff0c;它不仅是连接设备和云端的桥梁&#xff0c;更是推动智能应用落地的关键。在当今…

强烈推荐十款数据防泄密软件,高人气的数据防泄密软件

100G的文件不见了&#xff1f;客户的电话信息被拷贝走了&#xff1f;源代码被竞争对手搞到手了&#xff1f;这些都是严重的数据泄密事件&#xff0c;为此&#xff0c;我们需要数据防泄密软件来全方位保护数据安全。根据当前市场上的热门推荐和综合评价&#xff0c;以下几款数据…

Arm发布Cortex X925、A725、A520,Armv9.2架构

随着半导体行业的不断发展&#xff0c;Arm 通过突破技术界限&#xff0c;为终端用户提供尖端解决方案&#xff0c;在核心和 IP 架构创新方面处于领先地位&#xff0c;尤其是在移动领域。2024 年&#xff0c;Arm 的年度战略进步重点是增强去年的 Armv9.2 架构&#xff0c;并带来…