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

二、 spring security 依赖:

1、pom依赖:

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.14.RELEASE</version>
	</parent>
	
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aop</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.security</groupId>
			<artifactId>spring-security-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.security</groupId>
			<artifactId>spring-security-config</artifactId>
		</dependency>
	</dependencies>
 
	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

2、springBoot 和 spring security 版本对应关系:

springboot 版本     spring security版本
2.3.12.RELEASE    5.3.9.RELEASE
2.3.11.RELEASE    5.3.9.RELEASE
2.3.10.RELEASE    5.3.9.RELEASE
2.3.9.RELEASE    5.3.8.RELEASE
2.3.8.RELEASE    5.3.6.RELEASE
2.3.7.RELEASE    5.3.6.RELEASE
2.3.6.RELEASE    5.3.5.RELEASE
2.3.5.RELEASE    5.3.5.RELEASE
2.3.4.RELEASE    5.3.4.RELEASE
2.3.3.RELEASE    5.3.4.RELEASE
2.3.2.RELEASE    5.3.3.RELEASE
2.3.1.RELEASE    5.3.3.RELEASE
2.3.0.RELEASE    5.3.2.RELEASE
2.2.13.RELEASE    5.2.8.RELEASE
2.2.12.RELEASE    5.2.8.RELEASE
2.2.11.RELEASE    5.2.7.RELEASE
2.2.10.RELEASE    5.2.6.RELEASE
2.2.9.RELEASE    5.2.5.RELEASE
2.2.8.RELEASE    5.2.5.RELEASE
2.2.7.RELEASE    5.2.4.RELEASE
2.2.6.RELEASE    5.2.2.RELEASE
2.2.5.RELEASE    5.2.2.RELEASE
2.2.4.RELEASE    5.2.1.RELEASE
2.2.3.RELEASE    5.2.1.RELEASE
2.2.2.RELEASE    5.2.1.RELEASE
2.2.1.RELEASE    5.2.1.RELEASE
2.2.0.RELEASE    5.2.0.RELEASE
2.1.18.RELEASE    5.1.13.RELEASE
2.1.17.RELEASE    5.1.12.RELEASE
2.1.16.RELEASE    5.1.11.RELEASE
2.1.15.RELEASE    5.1.11.RELEASE
2.1.14.RELEASE    5.1.10.RELEASE
2.1.13.RELEASE    5.1.8.RELEASE
2.1.12.RELEASE    5.1.7.RELEASE
2.1.11.RELEASE    5.1.7.RELEASE
2.1.10.RELEASE    5.1.7.RELEASE
2.1.9.RELEASE    5.1.6.RELEASE
2.1.8.RELEASE    5.1.6.RELEASE
2.1.7.RELEASE    5.1.6.RELEASE
2.1.6.RELEASE    5.1.5.RELEASE
2.1.5.RELEASE    5.1.5.RELEASE
2.1.4.RELEASE    5.1.5.RELEASE
2.1.3.RELEASE    5.1.4.RELEASE
2.1.2.RELEASE    5.1.3.RELEASE
2.1.1.RELEASE    5.1.2.RELEASE
2.1.0.RELEASE    5.1.1.RELEASE
2.0.9.RELEASE    5.0.12.RELEASE
2.0.8.RELEASE    5.0.11.RELEASE
2.0.7.RELEASE    5.0.10.RELEASE
2.0.6.RELEASE    5.0.9.RELEASE
2.0.5.RELEASE    5.0.8.RELEASE
2.0.4.RELEASE    5.0.7.RELEASE
2.0.3.RELEASE    5.0.6.RELEASE
2.0.2.RELEASE    5.0.5.RELEASE
2.0.1.RELEASE    5.0.4.RELEASE
2.0.0.RELEASE    5.0.3.RELEASE
1.5.22.RELEASE    4.2.13.RELEASE
1.5.21.RELEASE    4.2.12.RELEASE
1.5.20.RELEASE    4.2.12.RELEASE
1.5.19.RELEASE    4.2.11.RELEASE
1.5.18.RELEASE    4.2.10.RELEASE
1.5.17.RELEASE    4.2.9.RELEASE
1.5.16.RELEASE    4.2.8.RELEASE
1.5.15.RELEASE    4.2.7.RELEASE
1.5.14.RELEASE    4.2.7.RELEASE
1.5.13.RELEASE    4.2.6.RELEASE
1.5.12.RELEASE    4.2.5.RELEASE
1.5.11.RELEASE    4.2.5.RELEASE
1.5.10.RELEASE    4.2.4.RELEASE
1.5.9.RELEASE    4.2.3.RELEASE
1.5.8.RELEASE    4.2.3.RELEASE
1.5.7.RELEASE    4.2.3.RELEASE
1.5.6.RELEASE    4.2.3.RELEASE
1.5.5.RELEASE    4.2.3.RELEASE
1.5.4.RELEASE    4.2.3.RELEASE
1.5.3.RELEASE    4.2.2.RELEASE
1.5.2.RELEASE    4.2.2.RELEASE
1.5.1.RELEASE    4.2.1.RELEASE
1.5.0.RELEASE    4.2.1.RELEASE
1.4.7.RELEASE    4.1.4.RELEASE
1.4.6.RELEASE    4.1.4.RELEASE
1.4.5.RELEASE    4.1.4.RELEASE
1.4.4.RELEASE    4.1.4.RELEASE
1.4.3.RELEASE    4.1.4.RELEASE
1.4.2.RELEASE    4.1.3.RELEASE
1.4.1.RELEASE    4.1.3.RELEASE
1.4.0.RELEASE    4.1.1.RELEASE
1.3.8.RELEASE    4.0.4.RELEASE
1.3.7.RELEASE    4.0.4.RELEASE

 三、核心组件:

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:主要用于无权访问时的处理
 

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

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

相关文章

从吸引外资连续三年高增长看中国IT云计算科技行业的发展

​引言&#xff1a;开放合作共发展,砥砺前行迎未来 【科技明说 &#xff5c; 科技热点关注】 我今天刚注意到商务部公布的最新数据&#xff0c;2019年至2021年&#xff0c;中国吸引外资实现连续三年高增长。 2022年前11个月实际使用外资金额11560.9亿元&#xff0c;为历史同期…

【开源】基于JAVA的民宿预定管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用例设计2.2 功能设计2.2.1 租客角色2.2.2 房主角色2.2.3 系统管理员角色 三、系统展示四、核心代码4.1 查询民宿4.2 新增民宿4.3 新增民宿评价4.4 查询留言4.5 新增民宿订单 五、免责说明 一、摘要 1.1 项目介绍 基于…

C#编程-实现线程声明周期

实现线程声明周期 当System.Threading.Thread类的对象被创建的时候,线程的生命周期开始。线程的生命周期在完成任务时结束。在线程的生命周期中有各种状态。这些状态是: 未启动状态可运行状态不可运行状态死亡状态下图显示了线程的各种状态和引起线程从一个状态变为另一个状…

【Python学习】Python学习11-元组

目录 【Python学习】Python学习11-元组 前言创建语法创建语法特殊形式访问元组操作元组元组运算符元组内置函数Python列表函数&方法参考 文章所属专区 Python学习 前言 本章节主要说明Python的Python 的元组与列表类似&#xff0c;不同之处在于元组的元素不能修改。通过小…

数字档案安全与高效管理的先锋——亚信安慧AntDB数据库

档案工作在维护历史真实面貌、保障人民利益方面具有至关重要的作用。随着社会的发展&#xff0c;数字化转型成为档案管理领域的不可逆趋势。数字档案的存储和传输已经成为档案工作的重要组成部分&#xff0c;然而&#xff0c;这也伴随着一系列的挑战&#xff0c;其中安全风险是…

【云原生 • Kubernetes】认识 k8s、k8s 架构、核心概念点介绍

目录 一、Kubernetes 简介 二、Kubernetes 架构 三、Kunbernetes 有哪些核心概念&#xff1f; 1. 集群 Cluster 2. 容器 Container 3. POD 4. 副本集 ReplicaSet 5. 服务 service 6. 发布 Deployment 7. ConfigMap/Secret 8. DaemonSet 9. 核心概念总结 一、Kubern…

Leetcode18-算术三元组的数目(2367)

1、题目 给你一个下标从 0 开始、严格递增 的整数数组 nums 和一个正整数 diff 。如果满足下述全部条件&#xff0c;则三元组 (i, j, k) 就是一个 算术三元组 &#xff1a; i < j < k &#xff0c; nums[j] - nums[i] diff 且 nums[k] - nums[j] diff 返回不同 算术三…

UIUC CS241 讲义:众包系统编程书

原文&#xff1a;angrave/SystemProgramming 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 欢迎来到 Angrave 的众包系统编程维基书&#xff01;这个维基是由伊利诺伊大学的学生和教师共同建立的&#xff0c;是伊利诺伊大学 CS 的 Lawrence Angrave 的众包创作实验。…

十个月,双非从零到大厂实习,我经历了什么?

个人背景 「双非大三」计科专业在读&#xff0c;某短视频「一线大厂」数据开发 22年10月份接触大数据&#xff0c;次年4月开始收割小厂实习offer&#xff0c;七月进入小厂实习&#xff0c;八月通过大厂面试 我只是万千普通人中的幸运儿&#xff0c;希望我的经历可以给一些人…

【小黑嵌入式系统第十四课】μC/OS-III程序设计基础(三)——信号量(任务同步资源同步)、事件标记组(与或多个任务)

上一课&#xff1a; 【小黑嵌入式系统第十三课】PSoC 5LP第二个实验——中断控制实验 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff1a;人工智能 文章目录 1 信号量1.1 简介1.2…

C语言之扫雷小游戏的实现【含递归展开】

文章目录 前言一、扫雷游戏代码设计思路二、设计扫雷代码1.创建菜单函数2.实现9x9扫雷3.初始化棋盘4.打印棋盘5.随机布置雷的位置6.排查雷的信息7.递归展开 三、源码1.新建一个test.c源文件2.新建一个game.c源文件3.创建一个game.h头文件 前言 扫雷游戏是1992年发行的一款大众类…

Wordpress网站开发问题解决——除了主页之外的所有页面都是“找不到页面内容”(修复记录)

一条纯经验操作 引言慌火上浇油后台查看 解决之路结尾 引言 最近 阿里云老是提醒我边缘计算机控制升级 我自己建立了一个网站&#xff0c;用的就是阿里云的万网服务器 所以 我去看看 结果跟我没什么关系 本以为就这么愉快地结束了 没想到 我建立的网站就只能打开主页 其他页…

vue3 +TS axiox接口模块添加,fast mock接口访问测试

目录 一.接口地址 二.apipost 接口测试&#xff0c;能否接通 三.安装axiox 1.下载安装依赖 2.新建src/utils/request.ts文件 2.1解释&#xff1a;后续后端真实接口需要替换baseURL&#xff0c;目前没有使用配置文件&#xff0c;后续更换 3.新建src/utils/storage.ts文件 …

九州金榜如何高质量培养孩子成长

在这个时代&#xff0c;孩子们就像温室里的花朵&#xff0c;被父母和家人宠爱着&#xff0c;享受着最优越的物质条件。 然而&#xff0c;在这样的环境中成长起来的孩子&#xff0c;却往往被很多父母称为"白眼狼"&#xff0c;对孩子的自私行为感到痛苦和失落。 1 随…

将 OpenCV 与 Eclipse 一起使用(插件 CDT)

先决条件 两种方式&#xff0c;一种是直接形成项目&#xff0c;另一种是 CMake 先决条件 在您的工作站中安装了 Eclipse&#xff08;只需要 C/C 的 CDT 插件&#xff09;。您可以按照以下步骤操作&#xff1a; 转到 Eclipse 站点下载面向 C/C 开发人员的 Eclipse IDE。根据您…

LT8911EX LVDS 转 eDP

概述 Lontium LT8911EX 是 LVDS 至 eDP 转换器&#xff0c;具有单端口或双端口可配置 LVDS 接收器&#xff0c;具有 1 个时钟通道和多达 8 个数据通道&#xff0c;每个数据通道的最大工作速率为 1.2Gbps&#xff0c;最大输入带宽为 9.6Gbps。该转换器对输入LVDS数据进行反串行…

TikTok云手机:突破传统社媒营销方式的黑科技

随着TikTok成为全球短视频领域的佼佼者&#xff0c;更多的企业和个人希望借助这个平台获得曝光和用户黏性。在这个背景下&#xff0c;TikTok云手机应运而生&#xff0c;为用户提供了更为便捷、高效的社交媒体运营方式。接下来&#xff0c;我们将深入剖析TikTok云手机的神奇之处…

深度学习技巧应用32-在YOLOv5模型上使用TensorRT进行加速的应用技巧

大家好,我是微学AI,今天给大家介绍一下深度学习技巧应用32-在YOLOv5模型上使用TensorRT进行加速的应用技巧,TensorRT是NVIDIA公司提供的一个深度学习推理(inference)优化器和运行时库。它专门为生产环境下的高性能深度学习推理提供优化支持。TensorRT可以加速深度学习模型…

安全漏洞周报(2024.01.01-2023.01.08)

漏洞速览 ■ 用友CRM系统存在逻辑漏洞 漏洞详情 1. 用友CRM系统存在逻辑漏洞 漏洞介绍&#xff1a; 某友CRM系统是一款综合性的客户关系管理软件&#xff0c;旨在帮助企业建立和维护与客户之间的良好关系。它提供了全面的功能&#xff0c;包括销售管理、市场营销、客户服…

AWS简介(Amazon Web Services )想使用怎么办?

Amazon Web Services&#xff08;AWS&#xff09;是由亚马逊公司提供的云计算平台和服务。AWS提供了一系列基础设施服务&#xff0c;包括计算能力、存储选项、数据库、机器学习、分析、物联网、安全性等&#xff0c;帮助组织和开发者建立和管理他们的应用。 以下是AWS的一些关…