认识SpringSecurity

本文涉及的产品
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: Spring Security 是成熟的安全框架,提供认证、鉴权及防御网络攻击等核心功能。支持多种认证方式(如OAuth2、JWT)、基于URL和方法的权限控制,并通过过滤器链实现安全逻辑,保障应用安全。

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 响应。AccessDeniedExceptionAuthenticationExceptionExceptionTranslationFilter作为安全过滤器之一插入FilterChainProxy中。ExceptionTranslationFilter下图展示了与其他组件的关系:首先,ExceptionTranslationFilter调用FilterChain.doFilter(request, response)应用程序的其余部分。如果用户未经过身份验证或者是AuthenticationException,则开始身份验证。SecurityContextHolder被清除HttpServletRequest保存后以便在身份验证成功后可用于重放原始请求。用于AuthenticationEntryPoint向客户端请求凭据。例如它可能会重定向到登录页面或发送WWW-Authenticate标头。否则,如果它是AccessDeniedException,则Access Denied。调用AccessDeniedHandler来处理拒绝访问。


相关文章
|
存储 安全 网络安全
铁壁如墙-WINDOWS SERVER 2019勒索病毒终极防御指南
铁壁如墙-WINDOWS SERVER 2019勒索病毒终极防御指南
1283 0
|
数据采集 Prometheus 监控
通过micrometer实时监控线程池的各项指标
最近的一个项目中涉及到文件上传和下载,使用到JUC的线程池ThreadPoolExecutor,在生产环境中出现了某些时刻线程池满负载运作,由于使用了CallerRunsPolicy拒绝策略,导致满负载情况下,应用接口调用无法响应,处于假死状态。考虑到之前用micrometer + prometheus + grafana搭建过监控体系,于是考虑使用micrometer做一次主动的线程池度量数据采集,最终可以相对实时地展示在grafana的面板中。
1551 0
通过micrometer实时监控线程池的各项指标
|
10月前
|
设计模式 XML 安全
Java枚举(Enum)与设计模式应用
Java枚举不仅是类型安全的常量,还具备面向对象能力,可添加属性与方法,实现接口。通过枚举能优雅实现单例、策略、状态等设计模式,具备线程安全、序列化安全等特性,是编写高效、安全代码的利器。
|
Java Windows
IDEA不使用lombok,如何快速生成get和set方法
【11月更文挑战第10天】在 IntelliJ IDEA 中生成 `get` 和 `set` 方法有多种方式:通过菜单操作、使用快捷键或自定义模板。菜单操作包括选择“Code”菜单中的“Generate...”,快捷键为“Alt + Insert”。自定义模板可在“File”->“Settings”->“Editor”->“Code Style”->“Java”中设置。批量生成时,可多选变量一次性生成。
4501 2
|
Unix Linux
如何免费在线试用 200+ Linux 和 Unix 发行版?
Linux 和 Unix 都有着各种各样的发行版,有的界面美观,有的功能强大。如果你想要尝试不同的 Linux 和 Unix 发行版,传统的作法是先在本地安装对应版本,再进行体验。这样效率非常低下,不仅需要下载镜像,还要进行安装,比较费时。
821 0
如何免费在线试用 200+ Linux 和 Unix 发行版?
|
Java 测试技术 Maven
Junit单元测试 @Test的使用教程
这篇文章是一个关于Junit单元测试中`@Test`注解使用的教程,包括在Maven项目中添加Junit依赖、编写带有@Test注解的测试方法,以及解决@Test注解不生效的常见问题。
|
存储 缓存 算法
ConcurrentHashMap的演进:从Java 8之前到Java 17的实现原理深度剖析
ConcurrentHashMap的演进:从Java 8之前到Java 17的实现原理深度剖析
|
消息中间件 存储 缓存
RocketMQ 生产者那些事
这篇文章,我们从源码的角度探寻 RocketMQ Producer 的实现机制。
RocketMQ 生产者那些事
|
Java API Maven
Gradle使用总结
Gradle使用总结
838 0
|
Windows
掌握命令提示符(CMD):Windows命令行工具的基本指南
掌握命令提示符(CMD):Windows命令行工具的基本指南
2529 0