IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Spring Security 实战 01 Security核心功能解析 -> 正文阅读

[Java知识库]Spring Security 实战 01 Security核心功能解析

Spring Security 简介

Spring Security 最早叫 Acegi Security,这个名称并不是说它和 Spring 就没有关系,它依然是为 Spring 框架提供安全支持的。和 Shiro 相比,Spring Security 重量级并且配置烦琐,自从 Spring Boot 推出后,就彻底颠覆了传统了 JavaEE 开发,自动化配置让许多事情变得非常容易,包括 Spring Security 的配置。在一个 Spring Boot 项目中,我们甚至只需要引入一个依赖,不需要任何额外配置,项目的所有接口就会被自动保护起来了。

Spring Security 核心功能

认证 (Authentication)

认证就是身份验证(你是谁?)

Spring Security 支持多种不同的认证方式,Spring Security 提供的认证机制不仅仅包括下面这些,我们还可以通过引入第三方依赖来支持更多的认证方式,同时,如果这些认证方式无法满足我们的需求,我们也可以自定义认证逻辑

  • 表单认证。
  • OAuth2.0 认证。
  • SAML2.0 认证。
  • CAS 认证。
  • RememberMe 自动认证。
  • JAAS 认证。
  • OpenID 去中心化认证。
  • Pre-Authentication Scenarios 认证。
  • X509 认证。
  • HTTP Basic 认证。
  • HTTP Digest 认证。

AuthenticationManager

Spring Security 中的认证工作主要由 AuthenticationManager 接口来负责
AuthenticationManager 的 authenticate 提供了认证的功能

/**
  返回 Authentication 代表成功
  抛出 AuthenticationException 异常,代表用无凭证无效
**/
public interface AuthenticationManager {
    Authentication authenticate(Authentication var1) throws AuthenticationException;
}

Authentication 的实现类
在这里插入图片描述

ProviderManager

ProviderManager 是 AuthenticationManager 最主要的实现类,用于管理 AuthenticationProvider , 而AuthenticationProvider 则是具体的身份认证实现
在一次完整的认证流程中,可能会同时存在多个 AuthenticationProvider(例如,项目同时支持 form 表单登录和短信验证码登录),多个 AuthenticationProvider 统一由 ProviderManager来管理。同时,ProviderManager 具有一个可选的 parent,如果所有的 AuthenticationProvider都认证失败,那么就会调用 parent 进行认证。parent 相当于一个备用认证方式,即各个
AuthenticationProvider 都无法处理认证问题的时候,就由 parent 出场收拾残局。

授权 (Authorization)

授权就是访问控制(你可以做什么?)。

Spring Security 支持基于 URL 的请求授权、支持方法访问授权、支持 SpEL 访问控制、支持域对象安全(ACL),同时也支持动态权限配置、支持 RBAC 权限模型等。

Spring Security 的授权体系中有两个关键接口

  • AccessDecisionManager : 做出最终访问控制(授权)决策,在AccessDecisionManager中会挨个遍历AccessDecisionVoter,进而决定是否允许用户访问
  • AccessDecisionVoter: 指示类负责对授权决策进行投票。投票的协调(即轮询AccessDecision投票者,统计他们的响应,并做出最终授权决定)由AccessDevisionManager执行。

Spring Security 中的过滤器

在 Spring Security 中,认证、授权等功能都是基于过滤器来完成的

FilterChainProxy

默认过滤器并不是直接放在 Web 项目的原生过滤器链中,而是通过一个FilterChainProxy 来统一管理。Spring Security 中的过滤器链通过 FilterChainProxy 实现 Filter 嵌入到 Web项目的原生过滤器链中。FilterChainProxy 维护了List filterChains 保存整个过滤器链

	private static final Log logger = LogFactory.getLog(FilterChainProxy.class);
    private static final String FILTER_APPLIED = FilterChainProxy.class.getName().concat(".APPLIED");
    private List<SecurityFilterChain> filterChains;
    private FilterChainValidator filterChainValidator;
    private HttpFirewall firewall;

过滤器链不仅仅只有一个,可能会有多个,当存在多个过滤器链时,多个过滤器链之间要指定优先级,当请求到达后,会 从
FilterChainProxy 进行分发,先和哪个过滤器链匹配上,就用哪个过滤器链进行处理。当系统中存在多个不同的认证体系时,那么使用多个过滤器链就非常有效。
在这里插入图片描述

Spring Security 中常见的过滤器

在这里插入图片描述

在这里插入图片描述

保存认证数据

Spring Security 也是将登录用户数据保存到 Session 中

SecurityContextHolder

当用户登录成功后,Spring Security 会将登录成功的用户信息保存到 SecurityContextHolder中。SecurityContextHolder 中提供了一些静态方法,用于保存应用程序中当前用户的安全上下文,SecurityContextHolder 中是委托 SecurityContextHolderStrategy 来处理保存的用户数据策略。

SecurityContextHolderStrategy

Spring0 Security 中提供的三种实现
在这里插入图片描述

  • MODE_THREADLOCAL (ThreadLocalSecurityContextHolderStrategy):将SecurityContext放在ThreadLocal中,开启子线程,子线程获取不到用户数据。
  • MODE_INHERITABLETHREADLOCAL (InheritableThreadLocalSecurityContextHolderStrategy):多线程环境,子线程也能获取到用户数据。
  • MODE_GLOBAL (GlobalSecurityContextHolderStrategy): SecurityContextHolderStrategy的基于静态字段的实现。
    这意味着JVM中的所有实例共享相同的SecurityContext。这对于富客户端(如Swing)通常很有用。
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-09-04 00:56:31  更:2022-09-04 01:02:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 12:26:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码