当前位置: 首页 > news >正文

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

相关文章:

  • js日期排序(使用sort)
  • 音视频中的DTS和PTS区别
  • 【数据库和表的管理】
  • 人大金仓 KingBase 表添加自增主键
  • Hadoop分布式文件系统(三)
  • Java复习
  • 学习笔记:在华为昇腾NPU上进行深度学习项目【未完待续】
  • 【Linux】各目录说明
  • Microsoft Remote Desktop for Mac 中文正式版下载 微软远程连接软件
  • 【linux驱动开发】在linux内核中注册一个杂项设备与字符设备以及内核传参的详细教程
  • 阿里云高性能云服务器_云主机_云服务器详解
  • 初识 Elasticsearch 应用知识,一文读懂 Elasticsearch 知识文集(4)
  • 59道SpringCloud面试题详解含答案(值得珍藏)
  • 多线程——定时器
  • mac 使用brew卸载node
  • 【剑指offer】让抽象问题具体化
  • 0x05 Python数据分析,Anaconda八斩刀
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • Android组件 - 收藏集 - 掘金
  • const let
  • Javascripit类型转换比较那点事儿,双等号(==)
  • JavaScript新鲜事·第5期
  • Java方法详解
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • MySQL数据库运维之数据恢复
  • PhantomJS 安装
  • SpriteKit 技巧之添加背景图片
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • Zepto.js源码学习之二
  • zookeeper系列(七)实战分布式命名服务
  • 测试开发系类之接口自动化测试
  • 代理模式
  • 如何优雅地使用 Sublime Text
  • 推荐一个React的管理后台框架
  • 运行时添加log4j2的appender
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • #define用法
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (13)Hive调优——动态分区导致的小文件问题
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (arch)linux 转换文件编码格式
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (十六)Flask之蓝图
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .Net CF下精确的计时器
  • .NET Core 2.1路线图
  • .NET Core 成都线下面基会拉开序幕
  • .NET HttpWebRequest、WebClient、HttpClient
  • .net MVC中使用angularJs刷新页面数据列表
  • .NET 分布式技术比较