4.认识SpringSecurity

简介: Spring Security 是一个功能强大的安全框架,核心功能包括认证、鉴权与防护。支持多种认证方式(如OAuth2、JWT、表单认证等),提供基于URL和方法的细粒度权限控制,集成RBAC模型,并具备防御CSRF等攻击的能力,保障应用安全。

1-SpringSecurity核心功能

1.认证
什么是认证:

1.什么是权限管理


SpringSecurity作为一款成熟的鉴权框架,目前支持的认证机制非常的全,这里我们可以简单了解一下:
表单认证
OAuth2.0认证
SAML2.0认证
CAS认证
RememberMe 自动认证
JAAS认证
OpenID 去中心化认证
X509认证
Http Basic认证
Http Digest认证
而SpringSecurity不仅可以支持上面的认证机制,还可以通过引入第三方依赖支持更多认证方式,同时也允许用户自定义认证逻辑(这个我们后面会讲)。
2.鉴权
基于上面的多种认证方式(实际那种认证都不影响鉴权),SpringSecurity支持基于URL的请求授权、方法访问授权、支持SPEL表达式访问控制、支持ACL自定义对象安全,同时支持动态授权配置、支持RBAC权限模型,简单一句话:基本没有SpringSecurity做不了的鉴权。
3.其他
除了熟知的认证、授权两个核心功能,SpringSecurity还可以自动防御很多网络攻击,如CSRF攻击等,可参照:

常见的网络攻击

恶意软件“恶意软件”一词用于描述具有险恶意图的软件,包括间谍软件、勒索软件、病毒和蠕虫。恶意软件通常会在用户点击危险链接或邮件附件时通过漏洞侵入网络,而这些链接或附件随后会安装危险的软件。一旦进入系统内部,恶意软件会执行以下操作:阻止对网络关键组件的访问(勒索软件)安装恶意软件或其他有害软件通...

微服务技术栈

2-SpringSecurity核心架构
SpringSecurity的种种功能,都是基于过滤器实现的,这些过滤器根据默认或用户指定的顺序(@Order注解或实现Ordered接口)排列,形成一个过滤器链。
1.过滤链
SpringSecurity的功能实现关键就是依赖过滤器链
Spring Security 的 Servlet 支持是基于 Servlet Filter 的,因此首先大致了解一下 Filter 的作用是有帮助的。下图显示了单个 HTTP 请求的处理程序的典型分层:

LFIFTERCHAIIN

SERVLET

CLIENT

FILTER.

FILTER.

FILTER

企妇妇中中中企北归在公业店中业中妇妇企


客户端(广义的前端)向应用程序(广义的后端)发送请求,容器根据请求URI路径创建FilterChain,其中包含应处理 HttpServletRequest的 Filter实例和 Servlet(可以简单理解就是一个运行的tomcat容器、WebLogic容器)。在 SpringMVC 应用程序中,Servlet 是 DispatcherServlet 的实例。一个 Servlet 最多可以处理一个 HttpServletRequest 和 HttpServletResponse。大致实现代码如下:
2.委托过滤代理
如果用户需要注册自己的过滤器标准,就可以采用委托过滤处理
Spring 提供了一个Filter名为 的实现DelegatingFilterProxy,允许在 Servlet 容器的生命周期和 Spring 的ApplicationContext。Servlet容器允许Filter使用自己的标准注册实例。您可以借助DelegatingFilterProxy通过标准 Servlet 容器机制进行注册,但将所有工作委托给实现Filter。

DELEGATINGFILTERPROXY

ITERCHAN

BEANFILTER

SERVLET

FILTER.

CLIENT

业维店际店庐际中店店桑店在桑际店在桑维铁

1

FILTER


DelegatingFilterProxy从查找Bean Filter ApplicationContext然后调用Bean Filter,大致实现代码:
3.过滤器链代理
SpringSecurity的过滤器链是通过FilterChainProxy嵌入到Web项目的原生过滤器链中
Spring Security 的 Servlet 支持包含在FilterChainProxy。FilterChainProxy是 Spring Security 提供的特殊功能Filter,允许Filter通过 委托给许多实例SecurityFilterChain。由于FilterChainProxy是一个 Bean,因此它通常包装在DelegatingFilterProxy中。

SECURITYFILTERCHAIN

DELEGATINGFILTERPROXY

FILTERCHAINPROXY

LFILFTERCHAIN

SERVLET

FILTER.

石中中中财中西中业中在公际I中公杭在中A中

FILTER

CLIENT

1

1


简单来说:SpringSecurity的过滤器链是通过FilterChainProxy嵌入到Web项目的原生过滤器链中。而这样的过滤链也不止一个,形如下面的安全过滤链中的图示,右侧就为我们展示了多个过滤链情况。
4.安全过滤链
过滤器链也会有多个,如请求URI:/user/**和/admin/**就可以是两个过滤器链,对应下图右侧
SecurityFilterChainFilterChainProxy 使用它来确定Filter应为当前请求调用哪些 Spring Security 实例。

DELEGATINGFILTERPROXY

SECUIRIITYAFIFTERCHAIN

SECURITYFILTER.

FILTERCHAINPROXY

SECURITYFILTER.

LFITERCLHAN

SERVLET

FILTER

全重妇药购商桑维公在在啡好公在北妇公中

CLIENT

FILTER.


下图显示了多个SecurityFilterChain实例

DELEGATINGFILTERPROXY

SECURITYFLTERCHAIN

FILTERCHAINPROXY

FTERCHAIN

SECURITYIFITERCHAINO

CLIENT

SERVLET

FILTER.

FILTER

596659G6OGGGG669G659965O9G399

AO达

中中电电中中中中中中中中中中中中中中中国商中中百中

K

品二地

在中中在日中中

3I电1元中电中电中中中1


5.处理安全异常
允许将和ExceptionTranslationFilter转换为 HTTP 响应。AccessDeniedExceptionAuthenticationException
ExceptionTranslationFilter作为安全过滤器之一插入FilterChainProxy中。
ExceptionTranslationFilter下图展示了与其他组件的关系:

AUTHENTICATIONENTRYPOINT

ACCESSDENIEDHANDLER

EXCEPTIONTRANSLATION

SECURITYCONTEXTHOLDER

SART/AUHENUICAATTON

SECURTYTERCHAN

ACCESSDENLEO

RECUCSTNORTNNEY

REQUESTCACHE

国中GGG中GG中GG中中GG中中GG中中中G中GGGGG中G在动

EXCEPONL

SECUITTY

量中国在中话国国国公国在话公公级话公

OINRINUEPIOCESSNG

AAGGAGG中GGGT

FILTER

GAAAEGEE


首先,ExceptionTranslationFilter调用FilterChain.doFilter(request, response)应用程序的其余部分。
如果用户未经过身份验证或者是AuthenticationException,则开始身份验证。
SecurityContextHolder被清除
HttpServletRequest保存后以便在身份验证成功后可用于重放原始请求。
用于AuthenticationEntryPoint向客户端请求凭据。例如它可能会重定向到登录页面或发送WWW-Authenticate标头。
否则,如果它是AccessDeniedException,则Access Denied。调用AccessDeniedHandler来处理拒绝访问。



相关文章
|
5月前
|
安全 Java Spring
2.过滤器链加载原理
本文深入解析Spring Security过滤器加载机制,通过源码分析DelegatingFilterProxy、FilterChainProxy与SecurityFilterChain的协作流程,揭示十五个过滤器如何自动装配并执行,帮助理解框架底层原理,为自定义认证页面奠定基础。
|
5月前
|
存储 缓存 安全
1-常用过滤器介绍
Spring Security通过一系列过滤器实现安全控制,如认证、授权、CSRF防护等,体现AOP思想。核心过滤器包括SecurityContextPersistenceFilter、UsernamePasswordAuthenticationFilter、LogoutFilter等,构成安全过滤链。实际加载的过滤器取决于配置,并非固定不变。
|
安全 IDE Java
使用Spring Initailizr功能~
使用Spring Initailizr功能~
709 1
|
计算机视觉 Python
OpenCV轮廓拟合与凸包的讲解与实战应用(附Python源码)
OpenCV轮廓拟合与凸包的讲解与实战应用(附Python源码)
757 0
|
安全 Java 关系型数据库
《阿里巴巴Java开发手册(终极版)》电子版下载地址
《阿里巴巴Java开发手册》(终极版)从Java开发者的视角出发,内容涵盖编程规约、异常日志、单元测试、安全规约、工程结构、MySQL数据库六个维度。 本手册自发布以来,多次迭代,阅读量数以百万计,可称为Java开发者的必读手册。通过阅读本书,开发者同学可以系统地学习到如何在编程过程中高效协作、提升程序的交付质量、以及提升代码内容的创造性和优雅性。
1693 0
《阿里巴巴Java开发手册(终极版)》电子版下载地址
|
4月前
|
文字识别 程序员 数据安全/隐私保护
macOS 上值得推荐的软件(第一弹)
本文推荐三款提升macOS使用效率的优质软件:Longshot(支持滚动截图的截图工具)、Mos(优化鼠标平滑滚动与方向设置)、NetNewsWire(免费开源RSS阅读器)。涵盖截图、系统操作与信息获取场景,助力程序员高效工作。无广告,可免费试用,欢迎体验与分享。
356 0
macOS 上值得推荐的软件(第一弹)
|
Java 编译器
java“变量 x 可能未被初始化”解决
在Java中,如果编译器检测到变量可能在使用前未被初始化,会报“变量 x 可能未被初始化”的错误。解决方法包括:1. 在声明变量时直接初始化;2. 确保所有可能的执行路径都能对变量进行初始化。
1336 2
|
安全 Java 数据安全/隐私保护
如何配置 Java 安全管理器来避免访问控制异常
配置Java安全管理器以防止访问控制异常,需在启动JVM时通过 `-Djava.security.manager` 参数启用,并设置安全策略文件,定义权限规则,限制代码执行操作,确保应用安全。
1093 1
|
Java 数据库连接 API
springBoot:后端解决跨域&Mybatis-Plus&SwaggerUI&代码生成器 (四)
本文介绍了后端解决跨域问题的方法及Mybatis-Plus的配置与使用。首先通过创建`CorsConfig`类并设置相关参数来实现跨域请求处理。接着,详细描述了如何引入Mybatis-Plus插件,包括配置`MybatisPlusConfig`类、定义Mapper接口以及Service层。此外,还展示了如何配置分页查询功能,并引入SwaggerUI进行API文档生成。最后,提供了代码生成器的配置示例,帮助快速生成项目所需的基础代码。
828 1
|
安全 Oracle Java
(四)深入理解Java并发编程之无锁CAS机制、魔法类Unsafe、原子包Atomic
其实在我们上一篇文章阐述Java并发编程中synchronized关键字原理的时候我们曾多次谈到过CAS这个概念,那么它究竟是什么?
521 1