Spring Security3.0版本

前言:

核心: 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.mzph.cn/web/19737.shtml

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

相关文章

scp:Linux系统本地与远程文件传输命令

scp 是Linux系统中用于在本地主机和远程主机之间进行文件传输的命令。 详细说明&#xff1a; scp 命令用于安全地将文件从一个主机传输到另一个主机&#xff0c;所有传输数据都是加密的。语法&#xff1a; scp [参数] [源文件路径] [目标主机:目标路径] 参数说明&#xff1a…

2024-05-31 blue-VH-driver-问题分析-有状态的服务-状态的处理

摘要: VH的driver对上层提供的接口&#xff0c;是会保持状态。这个状态&#xff0c;可以分为&#xff0c;查询的数据的状态&#xff0c;主要是为了提供翻页查询的功能。另一种状态&#xff0c;就是订阅。 有状态的服务: 状态是什么? 其实从调用方的角度更好的理解&#xff0c…

【仿真设计】基于STM32的畜牧动物定位及行为检测设计的Proteus仿真

基于STM32的畜牧动物定位及行为检测设计的Proteus仿真 所需器件&#xff1a; Proteus版本&#xff1a;8.15 整体功能&#xff1a; STM32为主控芯片。温度采集并显示到OLED屏幕上进行监测&#xff08;DS18B20传感器&#xff09;。 判定条件&#xff1a;默认为上限为40度&…

数据结构:堆的保姆级教学指南

✨✨小新课堂开课了&#xff0c;欢迎欢迎~✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 小新的主页&#xff1a;编程版小新-CSDN博客 1.堆的概念 堆是一种特殊的树结构&#xff0c;通常用…

【爱空间_登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞 …

C#【进阶】排序进阶

排序进阶 文章目录 插入排序希尔排序归并排序快速排序堆排序 插入排序 #region 知识点一 插入排序的基本原理 // 8 7 1 5 4 2 6 3 9 // 两个区域 // 排序区 // 未排序区 // 用一个索引值做分水岭// 未排序区元素 // 与排序区元素比较 // 插入到合适位置 // 直到未排序区清空 #e…

git使用流程与规范

原文网址&#xff1a;git代码提交流程与规范-CSDN博客 简介 本文git提交流程与规范是宝贵靠谱的经验&#xff0c;它能解决如下问题&#xff1a; 分支差距过大&#xff0c;导致合代码无数的冲突合完代码后发现代码丢失分支不清晰&#xff0c;无法追溯问题合代码耗时很长&…

数据结构的快速排序(c语言版)

一.快速排序的概念 1.快排的基本概念 快速排序是一种常用的排序算法,它是基于分治策略的一种高效排序算法。它的基本思想如下: 从数列中挑出一个元素作为基准(pivot)。将所有小于基准值的元素放在基准前面,所有大于基准值的元素放在基准后面。这个过程称为分区(partition)操作…

Redis 和 Mysql 如何保证两者数据一致性

文章目录 概述解决方案消息队列异步重试 基于 RocketMQ 的可靠性消息通信&#xff0c;来实现最终一致Canal 组件&#xff0c;监控 Mysql 中 binlog 的日志&#xff0c;把更新后的数据同步到 Redis 里面延时双删弱一致性和强一致性Canal详解 概述 在分布式系统中&#xff0c;保…

失之毫厘差之千里之load和loads

起源 最近在读pandas库的一些文档的时候&#xff0c;顺便也会将文档上的一些demo在编辑器中进行运行测试&#xff0c;其中在读到pandas处理Json数据这一节的时候&#xff0c;我还是像往常一样&#xff0c;将文档提供的demo写一遍&#xff0c;结果在运行的时候&#xff0c;直接…

【React篇】组件错误边界处理(组件错误引起的页面白屏)

我们知道在生产环境react错误会导致整个页面崩溃&#xff0c;显示为空白页面。 比如下图的错误&#xff0c;导致了左侧页面直接白屏&#xff1a; 由于某一个组件报错导致整个页面崩溃是很严重的问题&#xff0c;那么我们应该如何去降低代码报错带来的影响呢&#xff1f; 我们…

用HAL库改写江科大的stm32入门-6-3 PWM驱动LED呼吸灯

接线图&#xff1a; 2 :实验目的&#xff1a; 利用pwm实现呼吸灯。 关键PWM定时器设置&#xff1a; 代码部分&#xff1a; int main(void) {/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*…

【再探】设计模式—访问者模式、策略模式及状态模式

访问者模式是用于访问复杂数据结构的元素&#xff0c;对不同的元素执行不同的操作。策略模式是对于具有多种实现的算法&#xff0c;在运行过程中可动态选择使用哪种具体的实现。状态模式是用于具有不同状态的对象&#xff0c;状态之间可以转换&#xff0c;且不同状态下对象的行…

使用shell命令开启隧道转发的方式

1.适用场景 中转电脑可以通公网&#xff0c;也可以通内网&#xff0c;想把内网映射出去&#xff0c;公网其他电脑就可以通过该隧道远程访问内网的情况 2.命令 开隧道&#xff08;21235是自定义的转发端口&#xff09;&#xff1a; ssh -R 21235:内网地址:ssh端口 用户名公网服…

【C语言】基于C语言实现的贪吃蛇游戏

【C语言】基于C语言实现的贪吃蛇游戏 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;C语言学习之路 文章目录 【C语言】基于C语言实现的贪吃蛇游戏前言一.最终实现效果一.Win32 API介绍1.1Win32 API1.2控制台程序1.3控制台屏幕上的坐标COORD…

编程学习 (C规划) 6 {24_4_18} 七 ( 简单扫雷游戏)

首先我们要清楚扫雷大概是如何实现的&#xff1a; 1.布置雷 2.扫雷&#xff08;排查雷&#xff09; &#xff08;1&#xff09;如果这个位置是雷就炸了&#xff0c;游戏结束 &#xff08;2&#xff09;如果不是雷&#xff0c;就告诉周围有几个雷 3.把所有不是雷的位置都找…

蓝桥杯单片机第五届国赛题目

前言&#xff1a;针对串口的练手&#xff0c;此处只作代码记录&#xff0c;不进行分析和展示 目录 题目代码底层驱动主程序核心代码 题目 代码 注&#xff1a;EEPROM的五组后丢弃用一个记录次数的变量进行循环即可&#xff0c;我没有写这一部分代码。 底层驱动 IIC unsign…

[深度学习]yolov10+deepsort+pyqt5实现目标追踪

YOLOv10DeepSORTPyQt5实现目标追踪系统 在现代智能监控系统中&#xff0c;目标追踪技术扮演着至关重要的角色。结合YOLOv10&#xff08;一种先进的实时目标检测算法&#xff09;与DeepSORT&#xff08;一种多目标追踪算法&#xff09;&#xff0c;并通过PyQt5构建用户界面&…

java——网络原理初识

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 小比特 大梦想 目录 1.网络通信概念初识1.1 IP地址1.2端口号1.3协议1.3.1协议分层协议分层带来的好处主要有两个方面 1.3.2 TCP/IP五层 (或四层模型)1.3.3 协议的层和层之间是怎么配合工作的 1.网络通信概念初识…

再度“痛失”TOP5的小米手机,能否接好这碗AI“大活水”?

国产手机终端需求持续修复&#xff0c;国产品牌商是最大受益者。 近日&#xff0c;中国信通院发布2024年4月国内手机市场运行分析报告。报告显示&#xff0c;今年4月&#xff0c;国内市场手机出货量同比增长了28.8%。按品牌来看&#xff0c;国产品牌手机4月出货量占同期手机出…