4.认识SpringSecurity

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDSClaw,2核4GB
简介: SpringSecurity是Java生态中主流的权限框架,核心功能包括认证与鉴权。支持表单、OAuth2、JWT等多种认证方式,提供URL级、方法级权限控制及RBAC模型。基于过滤器链实现,通过FilterChainProxy集成到Web容器,具备CSRF防护等安全机制,灵活可扩展。(238字)

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

客户端(广义的前端)向应用程序(广义的后端)发送请求,容器根据请求URI路径创建FilterChain,其中包含应处理 HttpServletRequest的 Filter实例和 Servlet(可以简单理解就是一个运行的tomcat容器、WebLogic容器)。在 SpringMVC 应用程序中,Servlet 是 DispatcherServlet 的实例。一个 Servlet 最多可以处理一个 HttpServletRequest 和 HttpServletResponse。大致实现代码如下:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
// do something before the rest of the application
chain.doFilter(request, response); // invoke the rest of the application
// do something after the rest of the application
}
2.委托过滤代理
如果用户需要注册自己的过滤器标准,就可以采用委托过滤处理
Spring 提供了一个Filter名为 的实现DelegatingFilterProxy,允许在 Servlet 容器的生命周期和 Spring 的ApplicationContext。Servlet容器允许Filter使用自己的标准注册实例。您可以借助DelegatingFilterProxy通过标准 Servlet 容器机制进行注册,但将所有工作委托给实现Filter。

DelegatingFilterProxy从查找Bean Filter ApplicationContext然后调用Bean Filter,大致实现代码:
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain) {
// 1-延迟获取注册为 Spring Bean 的 Filter
Filter delegate = getFilterBean(someBeanName);
// 2-将工作委托给 Spring Bean
delegate.doFilter(request, response);
}
3.过滤器链代理
SpringSecurity的过滤器链是通过FilterChainProxy嵌入到Web项目的原生过滤器链中
Spring Security 的 Servlet 支持包含在FilterChainProxy。FilterChainProxy是 Spring Security 提供的特殊功能Filter,允许Filter通过 委托给许多实例SecurityFilterChain。由于FilterChainProxy是一个 Bean,因此它通常包装在DelegatingFilterProxy中。

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

下图显示了多个SecurityFilterChain实例

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

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

相关文章
|
IDE 程序员 开发工具
NTlite给window瘦身+定制程序员专属环境
NTlite给window瘦身+定制程序员专属环境
1774 0
|
1月前
|
人工智能 数据挖掘 程序员
AI 不会写代码也能做 App?字节「扣子 Coze」正在降低 AI 开发门槛
Coze(扣子)是字节跳动推出的低代码AI Bot开发平台,让非程序员也能通过描述需求、编排工作流、调用插件,快速构建AI客服、写作、数据分析等智能体应用。它封装LLM、工具、RAG与工作流,降低AI Agent开发门槛,正成为AI应用落地的新基建。
|
30天前
|
存储 运维 监控
2026常见开源的流量监控软件
2026年,开源流量监控工具丰富多样:ntopng重可视化、pmacct擅底层采集、vnStat轻量统计、LibreNMS/Cacti/Zabbix偏综合监控。AnaTraf则聚焦“易上手的深度分析”,集成实时监控、PCAP解码、TCP流重组与Web直查,降低多工具切换成本,助力高效排障。(239字)
|
5月前
|
人工智能 供应链 算法
深度盘点:2025年能源管理平台厂商排行榜与深度价值评析
在“双碳”战略背景下,企业能源管理正迈向价值创造新阶段。本文基于技术、行业、规模与生态四大维度,权威发布2025能源管理平台厂商排行榜,深度解析树根科技、华为云、阿里云等十大厂商核心优势,助力企业精准匹配战略伙伴,实现能效提升与可持续发展。
775 0
|
消息中间件 SQL 资源调度
|
分布式计算 Hadoop Java
Hadoop CentOS 7 安装配置
本篇根据 给力星 改动而来,文尾有来源 简介 Hadoop是一个由Apache基金会所开发的分布式系统基础架构。 用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。 [1] Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且
9221 0
|
算法框架/工具 计算机视觉 数据格式
人脸表情分类与识别:opencv人脸检测+Keras情绪分类
本次讲述的表情分类是识别的分析流程分为: 1、加载pre-model网络与权重; 2、利用opencv的函数进行简单的人脸检测; 3、抠出人脸的图并灰化; 4、表情分类器检测 . 一、表情数据集 主要来源于kaggle比赛,下载地址。
4776 0
|
机器学习/深度学习 达摩院 供应链
阿里CTO线/CRO线/达摩院/法务合规等专家,分享隐私保护计算应用实践
随着企业数据资产的不断累积,各数据资产拥有者迫切需要实现“数据可用不可见”,在严格保障数据隐私安全的前提下,最大化地把数据价值释放到业务中去。 在近年来对隐私保护计算技术的探索过程中,阿里巴巴内部也在积极促进业务数据安全流通,并沉淀下了丰富的实践案例。12月16日,《阿里巴巴隐私计算应用纷享会》(内部分享)在阿里巴巴总部西溪园区成功举办,超1000位集团员工在线收看了本次活动直播。
阿里CTO线/CRO线/达摩院/法务合规等专家,分享隐私保护计算应用实践
如何在Keil-MDK开发环境生成Bin格式文件
如何在Keil-MDK开发环境生成Bin格式文件
376 0
如何在Keil-MDK开发环境生成Bin格式文件
|
jenkins Java 测试技术
基于Jenkins和Argocd实现CI/CD(二)
基于Jenkins和Argocd实现CI/CD
基于Jenkins和Argocd实现CI/CD(二)