认识SpringSecurity

简介: SpringSecurity是Java生态中主流的权限管理框架,核心功能包括认证、鉴权及安全防护。支持表单、OAuth2、JWT等多种认证方式,提供URL级、方法级鉴权,支持RBAC、SPEL表达式控制,并具备CSRF等攻击防御能力。其架构基于过滤器链,通过FilterChainProxy实现多安全过滤链,灵活处理安全异常,保障系统安全。

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 请求的处理程序的典型分层:
客户端(广义的前端)向应用程序(广义的后端)发送请求,容器根据请求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从查找Bean Filter ApplicationContext然后调用Bean Filter,大致实现代码:
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来处理拒绝访问。

相关文章
|
2月前
|
SpringCloudAlibaba Java Nacos
SpringCloud概述
Spring Cloud是Spring推出的微服务统一解决方案,弥补了各技术分散的不足,具备约定优于配置、组件丰富、开箱即用等特点。通过伦敦地铁站命名版本,避免与子项目版本冲突。Spring Cloud Alibaba融合阿里开源组件(如Nacos、Sentinel、Seata等),提供完整微服务生态,因Netflix组件停更,现成为主流选择。本节介绍其诞生背景、版本机制及技术体系,为后续实战奠定基础。
|
2月前
|
存储 缓存 安全
1-常用过滤器介绍
本文介绍了Spring Security核心过滤器链中15个关键过滤器的作用,涵盖安全上下文管理、认证、授权、CSRF防护、会话控制及异常处理等机制,揭示其基于AOP思想的请求拦截与处理流程,帮助理解Security底层工作原理。
|
2月前
|
JSON API 数据库
如何写好一篇技术方案
本模板用于规范产品需求文档,涵盖项目背景、变更记录、功能模块、流程图、API设计等内容,支持语雀卡片与文件附件,提升团队协作效率。
|
2月前
|
Kubernetes IDE Java
部署篇(工具部署)
本文介绍EDAS在Kubernetes上部署SpringCloud应用的多场景工具体系,涵盖IDE、Maven插件、CI/CD、Terraform和CLI五种部署方式,覆盖开发至运维全链路,提升部署效率与安全性,并预告后续将聚焦“可灰度、可回滚、可监控”的线上变更实践。
|
2月前
|
SQL 运维 分布式计算
如何做好SQL质量监控
SLS推出用户级SQL质量监控功能,集成于CloudLens for SLS,提供健康分、服务指标、运行明细、SQL Pattern分析及优化建议五大维度,助力用户全面掌握SQL使用情况,实现精细化管理与性能优化,提升日志分析效率与体验。
|
2月前
|
容灾 关系型数据库 Nacos
Seata的部署和集成
本文介绍Seata分布式事务TC服务的部署与微服务集成步骤。包括下载、配置、数据库表初始化,通过Nacos实现配置共享与注册,搭建高可用集群,并实现异地容灾。微服务通过统一配置中心动态映射事务组,提升系统灵活性与可靠性。(239字)
|
2月前
|
Kubernetes Java 应用服务中间件
开发篇(脚手架下载)
本文介绍基于SpringCloud + Kubernetes的微服务开发实践,重点讲解EDAS 3.0如何优化开发者体验。通过阿里云项目初始化工具快速搭建Spring Cloud Alibaba应用,并利用Cloud Toolkit插件实现本地免运维注册中心,一键启动服务,显著提升开发效率。后续将深入部署、联调等环节。
|
2月前
|
自然语言处理 关系型数据库 MySQL
数据聚合、自动补全、数据同步
本文介绍了Elasticsearch中数据聚合、自动补全与数据同步的核心功能。通过Bucket、Metric、Pipeline三类聚合,可实现品牌分组、统计计算等实时分析;结合拼音分词器与Completion Suggester,实现搜索框智能提示;并通过MQ或binlog监听实现MySQL与ES的数据同步,提升系统解耦与实时性。
|
2月前
|
运维 安全 Devops
生产环境缺陷管理
git-poison基于go-git实现分布式bug追溯,解决多分支开发中bug漏修、漏发等问题。通过“投毒-解毒-银针”机制,自动化管理bug生命周期,降低协同成本,避免人为失误,已在大型团队落地应用,显著提升发布安全与效率。
|
2月前
|
NoSQL Shell Redis
Redis集群伸缩,转移插槽失败
Redis集群报错“Nodes don't agree about configuration!”,提示slot 0处于importing状态。需登录对应实例(如redis-cli -c -p 7004),执行`cluster setslot 0 stable`取消迁移,恢复槽位稳定状态,确保集群配置一致后方可重新平衡。