SpringSecurity之基本原理

news2024/11/18 14:02:46

目录

核心过滤器

FilterSecurityInterceptor

ExceptionTranslationFilter

UsernamePasswordAuthenticationFilter

BasicAuthenticationFilter

过滤器加载过程

重要接口

UserDetailsService接口

PasswordEncoder接口


springSecurity本质上就是一个过滤器链,由很多个过滤器组成,从启动是可以获取到过滤器链,当执行请求时就会执行相应的过滤器。

 这些过滤器在系统启动时springboot会自动都配置完成

核心过滤器
FilterSecurityInterceptor

是一个方法级的权限过滤器, 基本位于过滤链的最底部

1.继承Filter方法

2.调用invoke方法

3.invoke方法

 super.beforeInvocation(filterInvocation) 表示查看之前的 filter 是否通过。
filterInvocation.getChain().doFilter(filterInvocation.getRequest(), filterInvocation.getResponse());表示真正的调用后台的服务。

ExceptionTranslationFilter

异常过滤器,用来处理在认证授权过程中抛出的异常

核心方法doFilter:

UsernamePasswordAuthenticationFilter

对/login 的 POST 请求做拦截,校验表单中用户名,密码;

找到核心方法attemptAuthentication:

BasicAuthenticationFilter

主要用于处理httpBasic登录

 先检查请求头中是否有basic开头Authentication的信息,如果有,会尝试进行base64解码,然后取出用户名和密码,尝试进行登录;如果没有,就回放过该请求,交给下一个过滤器处理

过滤器加载过程

1.使用SpringSecurty配置过滤器,也就是SpringBoot项目中自动配置的DelegatingFilterProxy

 而在doFilter()方法各种判断过后调用了initDelegate()方法,在该方法里可以获取到FilterChainProxy对象

 2.在FilterChainProxy也会进入doFilter()方法,然后再进行各种判断后,会进入doFilterInternal()方法

 而在doFilterInternal()方法中会将过滤器链中的过滤器加载进来,进行逐个执行

重要接口
UserDetailsService接口

自定义逻辑控制认证逻辑;查询数据库中的用户名和密码

 返回值 UserDetails,这个类是系统默认的用户“主体”;

方法参数 username:表示用户名。此值是客户端表单传递过来的数据。默认情况下必须叫 username,否则无法接收

PasswordEncoder接口

用来数据加密;

 实现类

BCryptPasswordEncoder 是 Spring Security 官方推荐的密码解析器,平时多使用这个解析器。
BCryptPasswordEncoder 是对 bcrypt 强散列方法的具体实现。是基于 Hash 算法实现的单向加密。可以通过 strength 控制加密强度,默认10

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

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

相关文章

RabbitMQ系列(16)--用SpringBoot整合RabbitMQ

1、新建项目 2、新建Spring项目 3、选择合适的SpringBoot版本,依赖在这里可以先不选,可以在项目生成后在pom.xml文件里批量的导入依赖 4、设置项目的Maven (1)打开设置 (2)在搜索框里输入Maven搜索Maven设置,然后根据自己的实际情况设置Mave…

优化篇--Vue模版语法做动态渲染

Vue模版语法做动态渲染&#xff0c;随便记录一下 <a-row v-for"(row, rowIndex) in footerConfig" :key"rowIndex"><a-col span"4" v-for"(col, colIndex) in row" :key"colIndex"><span class"total-l…

新来的资深java不会lambda表达式,中级开发都笑拉了--lambda流这么难吗,教你怎么玩早学早吃香

因为一个人就全体 虽然没提名字但是说的意思和报身份证没区别, 我自己看着都尴尬… 标题就是事情的经过,和同事的聊天记录在最下面 前言 Lambda表达式是优化代码的工具&#xff0c;使得代码更简洁、易读&#xff0c;符合现代开发的趋势,以及推动函数式编程在Java开发中的流行…

web3创业有哪些机会?(一)

目录 1. 去中心化金融&#xff08;DeFi&#xff09;&#xff1a;2. 去中心化身份验证和数字身份&#xff1a;3. 去中心化市场和电子商务&#xff1a;4. 区块链游戏和虚拟资产&#xff1a;5. 数据隐私和安全&#xff1a;6. 去中心化社交媒体&#xff1a;7. 去中心化能源交易&…

Webpack原理与实战 --- 背景介绍

模块化的演进过程 Stage 1 - 文件划分方式 缺点&#xff1a; 模块直接在全局工作&#xff0c;大量模块成员污染全局作用域&#xff1b;没有私有空间&#xff0c;所有模块内的成员都可以在模块外部被访问或者修改&#xff1b;一旦模块增多&#xff0c;容易产生命名冲突&#…

自动化测试及典型开源的自动化测试工具

目录 前言&#xff1a; 自动化测试 自动化测试的意义 手工测试的局限性 自动化测试带来的好处 自动化测试的前提条件 自动化测试的方法 自动化测试的不足 自动化测试的应用方向 典型开源的自动化测试工具 前言&#xff1a; 自动化测试是一种使用软件工具和脚本来执行…

第二章——开始学习C++

进入C 首先介绍一个显示消息的简单C程序&#xff08;不同于以往的“Hello&#xff0c;world"&#xff09; #include<iostream> int main() {using namespace std;cout << "Come up and C me some time.";cout << endl;cout << "…

手机上无处不在的AI,原来还藏有这么多秘密

目录 一、AI在拍照中的应用 二、AI在日常生活中的应用 三、手机上AI的来自哪&#xff1f; 尽管2023年才过完了一半&#xff0c;但来自AI领域的科技震撼却没有要结束的意思。回顾过往&#xff0c;AI从没像今天这般那样受人瞩目&#xff0c;似乎一夜之间&#xff0c;它就成了新…

速览6月更新|EasyV产研团队带来产品功能优化

EasyV产研团队在6月份为您带来了一系列令人期待的产品功能优化&#xff0c;让数字化管理更加轻松高效&#xff01;话不多说&#xff0c;快来看看都有哪些新变化吧&#xff5e; 速览6月更新内容&#xff1a; 01 平台升级&#xff5c;工作台功能优化 02 模板上新&#xff5c;能…

LeetCode打卡 day58--单调栈

一个人的朝圣 — LeetCode打卡第58天 知识总结 Leetcode 739. 每日温度题目说明代码说明 Leetcode 496. 下一个更大元素 I题目说明代码说明 知识总结 单调栈的应用, 就是需要构建一个单调递增或者单调递减的栈, 去解决下一个大(小)的元素的问题 Leetcode 739. 每日温度 题目链…

网络安全面试题(含答案)

防范常见的 Web 攻击 什么是SQL注入攻击 攻击者在HTTP请求中注入恶意的SQL代码&#xff0c;服务器使用参数构建数据库SQL命令时&#xff0c;恶意SQL被一起构造&#xff0c;并在数据库中执行。 用户登录&#xff0c;输入用户名 lianggzone&#xff0c;密码 ‘ or ‘1’’1 &a…

JavaScript 之【事件循环】机制的深入浅出解读

前言&#xff1a; JavaScript 作为一种单线程的开发语言&#xff0c;在执行的时候会有特定的风格&#xff0c;本章节以 JS 单线程的特点为引入&#xff0c;详细分析讲解了 JS 的事件循环机制 目录 什么是【进程】什么是【线程】浏览器拥有哪些进程和线程【渲染主线程】的工作模…

冒泡排序(思路+代码)

冒泡排序&#xff1a; 变量&#xff1a; flag 如果没有交换过就终止循环就是flase&#xff0c;终止外层循环 第二层循环&#xff1a;n个数比较n-1次 第一层循环&#xff1a; 第一趟&#xff0c;比较n-1次 第二趟&#xff0c;比较n-2次 ... ... 代码&#xff1a; import…

展望“智”造未来|深眸科技以AI+机器视觉,夯基产业新发展格局

近日&#xff0c;2023昆山元宇宙国际装备展在昆山国际会展中心落下帷幕。展会期间&#xff0c;各大展商携新技术、新产品、新概念纷纷亮相&#xff0c;为现场参展观众和嘉宾呈现如梦似幻的元宇宙盛会。 此次展会&#xff0c;深眸科技认识了诸多工业元宇宙领域的优质产品及企业…

Spring Boot3入门快速体验-Developing Your First Spring Boot Application

一、进入Getting Started https://spring.io/ 点击Spring Boot点击LEARN,再点击Reference Doc.&#xff1a; 再点击Getting Started Introducing Spring Boot, System Requirements, Servlet Containers, Installing Spring Boot, and Developing Your First Spring Boot App…

前端Vue组件之仿京东拼多多领取优惠券弹出框popup 可用于电商商品详情领券场景使用

随着技术的发展&#xff0c;开发的复杂度也越来越高&#xff0c;传统开发方式将一个系统做成了整块应用&#xff0c;经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改&#xff0c;造成牵一发而动全身。通过组件化开发&#xff0c;可以有效实现单…

痞子衡嵌入式:从功耗测试角度了解i.MXRTxxx系列片内SRAM分区电源控制

大家好&#xff0c;我是痞子衡&#xff0c;是正经搞技术的痞子。今天痞子衡给大家介绍的是从功耗测试角度了解i.MXRTxxx系列片内SRAM分区电源控制。 我们知道配合 MCU 一起工作的存储器包含 ROM(Flash) 和 RAM 两类&#xff0c;前者主要放 RO 代码和数据&#xff0c;后者放 RW …

文件系统考古4:如何支持多个文件系统

Steve Kleiman 在 1986 年撰写了《Vnodes: An Architecture for Multiple File System Types in Sun UNIX》一文。这篇论文幅较短&#xff0c;大部分内容是数据结构的列举&#xff0c;以及 C 语言结构之间相互指向的图表。 Steve Kleiman是分布式文件系统领域的专家&#xff0c…

selenium 浏览器托管

selenium 浏览器托管&#xff0c;是启动一个浏览器&#xff0c;调试代码&#xff0c;可以运行当前调试代码&#xff0c;不用从启动浏览器开始从头执行 在谷歌浏览器chrome.exe 目录中打开cmd 输入下面目录&#xff0c;启动器浏览器 chrome.exe --remote-debugging-port9222 -…