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更新具体报错的区分

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【仿真成品设计】基于STM32的直流电机控制器Proteus仿真

基于STM32的直流电机控制器Proteus仿真 所需器件&#xff1a; Proteus版本&#xff1a;8.15 整体功能&#xff1a; 直流无刷电机控制器是基于ST公司的STM32F103芯片的基础上使用标准库进行开发设计的。选用L298芯片来控制直流电机&#xff1b;采用使用0.96寸OLED屏幕做直流…

振弦采集仪在岩土工程固结沉降监测中的应用研究

振弦采集仪在岩土工程固结沉降监测中的应用研究 岩土工程固结沉降是指土体在受到外力作用下&#xff0c;由于土体颗粒之间的重排结构&#xff0c;导致土体体积缩小和沉降的过程。固结沉降的监测对于岩土工程的设计和施工具有重要的意义&#xff0c;而振弦采集仪作为一种先进的…

主线程等待所有线程结束之后再执行

如何让主线程等待所有线程结束之后再执行 1、Future的机制&#xff0c;使用Future.get()阻塞等待结果&#xff08;Future&#xff0c;FutureTask&#xff09; 2、CountDownLatch同步工具类&#xff0c;此类的作用就是一个线程等待所有线程结束之后再执行 3、CompletableFuture …

使用Python爬取华为市场游戏类APP应用

文章目录 1. 写在前面2. 接口分析3. 爬虫开发4. 下载链接获取 【&#x1f3e0;作者主页】&#xff1a;吴秋霖 【&#x1f4bc;作者介绍】&#xff1a;擅长爬虫与JS加密逆向分析&#xff01;Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守…

统计信号处理-匹配滤波器实现与验证(matlab仿真)

什么是匹配滤波器 匹配滤波器是一种信号处理技术&#xff0c;它用于从噪声中提取信号&#xff0c;特别是在信号与噪声比率较低的情况下。匹配滤波器之所以存在&#xff0c;是因为它在信号检测和估计方面具有几个关键的优势&#xff1a; 最大化信噪比&#xff1a;匹配滤波器设计…

JVS低代码表单消息提示:从站内信到钉钉全覆盖,适应各类应用场景

表单消息提示配置 表单消息发送方式分为站内信、公众号、企业微信、钉钉和邮件。 站内信发送是指系统内部之间发送消息&#xff0c;用户登录系统后以弹窗形式在桌面右下角提示。 公众号发送消息则是用户在系统个人中心绑定微信后通过公众号接收消息。 企业微信、钉钉和邮件…

【Docker】宝塔创建Docker容器配置nginx

前言 本篇是我入门docker的第一篇&#xff0c;由于docker具有很好的移植性&#xff0c;易于安装&#xff0c;开箱即用&#xff1b;签约的公司项目开发需要我进行学习&#xff0c;否则money减半&#xff0c;5555~ 百度找了一圈&#xff0c;只有关于docker怎么装宝塔服务器的却没…

运算符重载(下)

目录 前置和后置重载前置的实现Date& Date::operator()代码 后置的实现Date Date::operator(int )代码 前置--和后置--重载前置--的实现Date& Date::operator--( )代码 后置--的实现Date Date::operator--(int )代码 流插入运算符重载流插入运算符重载的实现流提取运算…

1、css3 动态button展示学习

效果图&#xff1a; 1、首先创建html代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title…

LNMP分布式搭建

一、准备三台主机 192.168.100.11 mysql 192.168.100.12 nginx 192.168.100.13 php 二、关闭防火墙及安全策略 systemctl stop firewalld setenforce 0 三、安装nginx&#xff08;192.168.100.11&#xff09; 1、添加nginx源 vim /etc/yum.repos.d/ng…

数据库系统概念(第七周 第一堂)(E-R模型)

目录 前言 基本概念 观点与模型 作用与要求 E-R模型元素 实体&#xff08;entity&#xff09; 实体集&#xff08;entity set&#xff09; 属性&#xff08;attribute&#xff09; 域&#xff08;domain&#xff09; 码 &#xff08;key&#xff09; 联系 &#x…

allure测试报告用例数和 pytest执行用例数不相同问题

我出现的奇怪问题&#xff1a; pytest执行了9条用例&#xff0c;但是测试报告确只显示3条用例 我将其中的一个代码删除后&#xff0c;发现allure测试报告又正常了 我觉得很奇怪这个代码只是删除了二维数组的第一列&#xff0c;我检查了半天都找不到问题&#xff0c;只有降低版本…

优选算法一:双指针算法与练习(移动0)

目录 双指针算法讲解 移动零 双指针算法讲解 常见的双指针有两种形式&#xff0c;一种是对撞指针&#xff0c;一种是快慢指针。 对撞指针&#xff1a;一般用于顺序结构中&#xff0c;也称左右指针。 对撞指针从两端向中间移动。一个指针从最左端开始&#xff0c;另一个从最…

云计算与 openstack

文章目录 一、 虚拟化二、云计算2.1 IT系统架构的发展2.2 云计算2.3 云计算的服务类型 三、Openstack3.1 OpenStack核心组件 一、 虚拟化 虚拟化使得在一台物理的服务器上可以跑多台虚拟机&#xff0c;虚拟机共享物理机的 CPU、内存、IO 硬件资源&#xff0c;但逻辑上虚拟机之…

Python魔法之旅-魔法方法(04)

目录 一、概述 1、定义 2、作用 二、主要应用场景 1、构造和析构 2、操作符重载 3、字符串和表示 4、容器管理 5、可调用对象 6、上下文管理 7、属性访问和描述符 8、迭代器和生成器 9、数值类型 10、复制和序列化 11、自定义元类行为 12、自定义类行为 13、类…

【香橙派 AIpro】新手保姆级开箱教程:Linux镜像+vscode远程连接

香橙派 AIpro 开发板 AI 应用部署测评 写在最前面一、开发板概述官方资料试用印象适用场景 二、详细开发前准备步骤1. 环境准备2. 环境搭建3. vscode安装ssh插件4. 香橙派 AIpro 添加连接配置5. 连接香橙派 AIpro6. SSH配置 二、详细开发步骤1. 登录 juypter lab2. 样例运行3. …

Windows11 安装Oracle11gR2

一、下载Oracle 11gR2 安装包下载地址&#xff1a;Database Software Downloads | Oracle 下载两个压缩包&#xff0c;下载完成后解压缩到同一个目录。 二、安装Oracle 11gR2 Oracle安装是单程票&#xff0c;因为Oracle卸载特别麻烦&#xff0c;因此最好一次通过。 2.1 安…

排八字软件有哪些?

排八字软件有哪些&#xff1f;在市面上有很多排八字的软件可供选择&#xff0c;其中一些比较知名的有&#xff1a; 无敌八字排盘软件&#xff1a;这是一款功能强大的八字排盘软件&#xff0c;提供详细的八字解析和命理分析服务&#xff0c;且完全免费。 网易星盘&#xff1a;网…

【JAVA |String类】JAVA中的String类常见用法详解

✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天开心哦&#xff01;✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; &#x1f388;丠丠64-CSDN博客&#x1f388; ✨✨ 帅哥美女们&#xff0c;我们共同加油&#xff01;一起…

500元以内的蓝牙耳机哪个牌子好?首推四大热门品牌盘点

在500元以内的预算范围内&#xff0c;蓝牙耳机试市场上还是有很多可以选择的&#xff0c;它们以出色的音质、舒适的佩戴体验和稳定的连接性能赢得了消费者的青睐&#xff0c;作为一个蓝牙耳机的重度使用者&#xff0c;下也用过不少的500元以内的蓝牙耳机&#xff0c;下面就给大…