Spring Security介绍

  一、Spring Security:

1、简介:Spring Security 是一个非常流行和成功的 Java 应用开发框架。Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方案。一般来说,Web 应用的安全性包括用户认证(Authentication)和用户授权(Authorization)两个部分。

(1)用户认证:指的是验证某个用户是否为系统中的合法主体,也就是说用户能否访问该系统。用户认证一般要求用户提供用户名和密码。系统通过校验用户名和密码来完成认证过程。

Spring Security 框架支持主流的认证方式,包括 HTTP 基本认证、HTTP 表单验证、HTTP 摘要认证、OpenID 和 LDAP 等。

(2)用户授权:指的是验证某个用户是否有权限执行某个操作。在一个系统中,不同用户所具有的权限是不同的。比如对一个文件来说,有的用户只能进行读取,而有的用户可以进行修改。一般来说,系统会为不同的用户分配不同的角色,而每个角色则对应一系列的权限。

Spring Security 提供了基于角色的访问控制和访问控制列表(Access Control List,ACL),可以对应用中的领域对象进行细粒度的控制。

2、结构:通过继承

org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter

实现权限配置,登录验证成功后初始化org.springframework.security.core.userdetails.UserDetails,存储当前登录用户。默认(可缺省)登录接口:/login

二、核心组件:

1、Authentication 认证:Authentication接口就是用来携带认证信息的。认证信息包括用户身份信息,密码,及权限列表等;

2、UsernamePasswordAuthenticationFilter:账号密码认证过滤器,用于认证用户信息,认证方式是由 AuthenticationManager 接口提供。

3、AuthenticationManager:认证管理器,是认证相关的核心接口,也是发起认证的出发点。实际业务中可能根据不同的信息进行认证,所以Spring推荐通过实现 AuthenticationManager 接口来自定义自己的认证方式。Spring 提供了一个默认的实现 ProviderManager。

4、ProviderManager:认证提供者管理器,该类中维护了一个认证提供者列表,只要这个列表中的任何一个认证提供者提供的认证方式认证通过,认证就结束。

5、AuthenticationProvider:认证提供者,这是一个接口,具体如何认证,就看如何实现该接口。Spring Security 提供了 DaoAuthenticationProvider 实现该接口,这个类就是使用数据库中数据进行认证。

6、UserDetailsService:根据用户名获取用户详细信息

7、UserDetails:用户的详细信息,主要用于登录认证。

8、SecurityContextHolder:是最基本的对象,它负责存储当前 SecurityContext 信息。SecurityContextHolder默认使用 ThreadLocal 来存储认证信息,意味着这是一种与线程绑定的策略。在Web场景下的使用Spring Security,在用户登录时自动绑定认证信息到当前线程,在用户退出时,自动清除当前线程的认证信息。

9、SecurityContext:负责存储认证通过的用户信息(Authentication对象),保存着当前用户是什么,是否已经通过认证,拥有哪些权限等等。

10、AuthenticationSuccessHandler:主要用于认证成功后的处理,比如返回页面或者数据。

11、AuthenticationFailureHandler:主要用于认证失败后的处理,比如返回页面或者数据。

12、AccessDecisionManager:主要用于实现权限,决定请求是否具有访问的权限。

13、AccessDeniedHandler:主要用于无权访问时的处理
 

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

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

相关文章

vue3引用类型和基础类型深度克隆

深度克隆失效的一个例子 import { cloneDeep } from "lodash"; import { ref } from "vue";const navArr ref(["recommend","hot","new", ]) const list1: any ref([]) const list2: any ref([]) const list3: any ref(…

【Leetcode】15. 三数之和

【Leetcode】15. 三数之和 题目链接思路代码 题目链接 【Leetcode】15. 三数之和 思路 排序双指针去重 代码 func threeSum(nums []int) [][]int {// 切片升序排序sort.Slice(nums, func(i, j int) bool {return nums[i] < nums[j]})// 结果切片ans : [][]int{}n : len(n…

如何设置电脑桌面提醒,电脑笔记软件哪个好?

对于大多数上班族来说&#xff0c;每天要完成的待办事项实在太多了&#xff0c;如果不能及时去处理&#xff0c;很容易因为各种因素导致忘记&#xff0c;从而给自己带来不少麻烦。所以&#xff0c;我们往往会借助一些提醒类的软件将各项任务逐一记录下来&#xff0c;然后设置上…

微前端理论

学习微前端时&#xff0c;有几个核心概念和技术点是必须要理解和掌握的&#xff1a; 微前端架构&#xff1a; 微前端是一种将大型单体应用拆分为多个小型前端应用&#xff0c;每个应用可以独立开发、部署和升级&#xff0c;最后通过某种集成方式统一呈现给用户的前端架构模式。…

手持终端PDA定制厂家_5G安卓手持机设备/条形码扫描手持机PDA

手持终端PDA是一种功能强大的手持终端设备&#xff0c;具备一维码和二维码扫描功能&#xff0c;广泛应用于门票管理、零售、智能巡检、仓储物资管理、金融、快递等领域。 这款手持终端基于MT6877方案&#xff0c;搭载八核处理器(2xCortex-A78 2.4GHz 6xCortex-A55 2.0GHz)&…

高速PCB设计10大要点总结

学习高速PCB设计&#xff0c;掌握这10个知识点很重要&#xff01; 在高速PCB设计的学习中&#xff0c;有很多的知识点需要大家去了解和掌握&#xff0c;比如常见的信号完整性、反射、串扰、电源噪声、滤波等。本文和大家分享10个和高速PCB设计相关的重要知识&#xff0c;希望对…

ChatGPT4+Python近红外光谱数据分析及机器学习与深度学习建模进阶应用

2022年11月30日&#xff0c;可能将成为一个改变人类历史的日子——美国人工智能开发机构OpenAI推出了聊天机器人ChatGPT3.5&#xff0c;将人工智能的发展推向了一个新的高度。2023年4月&#xff0c;更强版本的ChatGPT4.0上线&#xff0c;文本、语音、图像等多模态交互方式使其在…

React16源码: React中的setState和forceUpdate源码实现

setState 和 forceUpdate 1 &#xff09; 概述 通过 class component 内部的 setState&#xff0c;以及 forceUpdate 去更新一个组件的过程在react的应用当中&#xff0c;我们只有 ReactDOM.render setState&#xff0c;以及 forceUpdate这几种种方式去更新react的应用是合理…

【Linux】修改Linux远程登录用户并授权,禁止root远程登录,修改Linux登录端口

一、修改Linux远程登录用户并授权 添加一个新的普通用户 用如下命令 adduser newuser 修改密码 passwd newuser 根据提示 输入密码 赋予newuser root 权限 修改 /etc/sudoers 文件 找到如下一行 &#xff0c;取消注释 ##Allows people in group wheel to run all commands %wh…

C# 学习笔记2-控制流与类型转换

控制流与类型转换 关于变量的简单操作判断循环类型转换异常处理检查数字类型的溢出 变量操作 一元运算符 Unary operators x&#xff0c;x&#xff0c;x--&#xff0c;--x。 这些运算符同 C。 postfix operator 后置运算符 还有 typeof(int)&#xff0c;sizeof(int)。 …

最新GPT4、AI绘画、DALL-E3文生图模型教程,GPT语音对话使用,ChatFile文档对话总结

一、前言 ChatGPT3.5、GPT4.0、GPT语音对话、Midjourney绘画&#xff0c;文档对话总结DALL-E3文生图&#xff0c;相信对大家应该不感到陌生吧&#xff1f;简单来说&#xff0c;GPT-4技术比之前的GPT-3.5相对来说更加智能&#xff0c;会根据用户的要求生成多种内容甚至也可以和…

【轮式移动机器人课程笔记 5】运动学仿真

L5 运动学仿真 本节重点&#xff1a; 如何理解推导出的运动学模型 回顾&#xff1a;机器人运动学模型 正向&#xff08;前向&#xff09;运动学模型反向运动学模型 基于MatLab运动学仿真 本节重点&#xff0c;如何利用matlab对运动学进行仿真 5.1 回顾运动学模型 [ x ˙ y …

离线AI聊天清华大模型(ChatGLM3)本地搭建

在特定的情况下&#xff0c;要保证信息安全的同时还能享受到AIGC大模型带来的乐趣和功能&#xff0c;那么&#xff0c;离线部署就能帮助到你&#xff0c;最起码&#xff0c;它是一个真正可用的方案。 大模型本身清华的 (ChatGLM3)&#xff0c;为的是对中文支持友好&#xff0c…

kotlin的接口详解

在 Kotlin 中&#xff0c;接口&#xff08;Interface&#xff09;是一种定义了一组方法的抽象类型。与类不同&#xff0c;接口不能包含状态或字段。接口中的方法可以有默认实现&#xff0c;也可以是抽象的需要在实现类中提供具体实现的方法。 为什么要使用接口&#xff1f; 多…

2696. 删除子串后的字符串最小长度 --力扣 --JAVA

题目 给你一个仅由 大写 英文字符组成的字符串 s 。 你可以对此字符串执行一些操作&#xff0c;在每一步操作中&#xff0c;你可以从 s 中删除 任一个 "AB" 或 "CD" 子字符串。 通过执行操作&#xff0c;删除所有 "AB" 和 "CD" 子串&a…

pythonnumpy十三:借助numpy解方程

使用NumPy进行解方程可以涉及线性方程组和非线性方程的求解。下面将给出详细的示例&#xff1a; 1.解线性方程组&#xff1a; 考虑以下线性方程组&#xff1a; 2x 3y 6 4x 5y 7我们可以使用NumPy的linalg.solve()函数求解该线性方程组。 import numpy as np# 定义系数矩…

Unity Editor实用功能:Hierarchy面板的对象上绘制按按钮并响应

目录 需求描述上代码打个赏吧 需求描述 现在有这样一个需求&#xff1a; 在Hierarchy面板的对象上绘制按钮点击按钮&#xff0c;弹出菜单再点击菜单项目响应自定义操作在这里的响应主要是复制对象层级路路径 看具体效果请看动图&#xff1a; 注&#xff1a; 核心是对Edito…

【2024系统架构设计】 系统架构设计师第二版-安全架构设计理论与实践

目录 一 安全架构概述 二 安全模型 三 系统安全体系架构规划框架 四 信息安全整体架构设计 五 网络安全体系架构设计 六 数据库系统安全设计

霹雳吧啦Wz《pytorch图像分类》-p6MobileNet网络

《pytorch图像分类》p6MobileNet网络结构详解 1 MobileNet v1网络1.1 Depthwise convolution&#xff08;DW卷积&#xff09;1.1.1Depthwise separable convolution&#xff08;深度可分的卷积操作&#xff09; 1.2 增加超参数α和β 2 MobileNet v2网络2.1 Inverted Residuals…

无标题无标题

ABC Puzzle 326D 题意&#xff1a;给两个长n的仅由ABC组成的字符串s1&#xff0c;s2&#xff0c;是否在n*n阵列中满足以下条件&#xff0c;若满足则输出&#xff0c;不满足输出No 条件1&#xff1a;每行每列仅包含一个A&#xff0c;一个B&#xff0c;一个C &#x…