网站建设前期开发,怎么做网站搜索,网站建设教程网哪个好,达人设计网官方网站前言#xff1a;本系列博客基于Spring Boot 2.6.x依赖的Spring Security5.6.x版本 Spring Security中文文档#xff1a;https://springdoc.cn/spring-security/index.html 一、什么是Spring Security
Spring Security是一个安全控制相关的java框架#xff0c;它提供了一套全…前言本系列博客基于Spring Boot 2.6.x依赖的Spring Security5.6.x版本 Spring Security中文文档https://springdoc.cn/spring-security/index.html 一、什么是Spring Security
Spring Security是一个安全控制相关的java框架它提供了一套全面的安全解决方案包括身份验证、授权、防止攻击等功能。支持点击劫持CSRFXSSMITM中间人等常见攻击手段的保护并提供密码编码LDAP认证Session管理Remember Me认证JWTOAuth 2.0等功能特性。Spring Security基于过滤器链的概念可以轻松地集成到任何基于Spring的应用程序中。
二、Spring Security架构
在Spring Web应用中基本上只有一个DispatcherServelt主要用于请求分发缺乏安全相关的支持和合适的扩展机制。而过滤器Filter是运行在Servlet之前的一个Servlet运行前可能会经过多个Filter。所以在请求到达Servlet之前先通过Filter进行安全验证就是一个非常合理的实现方式而Spring Security的功能就是基于Filter来实现的。下图是Spring Security官方提供的架构图。 从架构图中可以看出Spring Security功能实现主要由FilterChain、DelegatingFilterProxy、FilterChainProxy、SecurityFilterChain、Security Filter等组件组成。
1、FilterChain
FilterChain是过滤器链客户端向应用程序发送一个请求时容器会创建一个由Filter和Servlet组成的过滤器链FilterChain。 通过使用FilterChain我们可以以插拔的方式添加或移除特定功能的Filter而无需改动现有的代码非常方便。
2、DelegatingFilterProxy
Spring Web包中提供了一个名为DelegatingFilterProxy的Filter实现。它的功能是在Servlet容器和Spring容器之间建立桥梁。 Servlet容器不知道Spring定义的Bean而Spring Security的大部分组件及其依赖都是注册到Spring容器中的Bean。所以DelegatingFilterProxy的主要工作就是从WebApplicationContext获取指定名称的Filter Bean然后将工作委托这个Bean的doFilter方法。 通过这种方式DelegatingFilterProxy实现了将Servlet容器中的Filter请求委托给Spring容器中的具体Filter Bean处理从而实现了Servlet容器和Spring容器之间的无缝连接。
3、FilterChainProxy
FilterChainProxy是Spring Security提供的一个特殊的Filter。它的主要作用就是主要作用就是查找匹配当前http请求规则的SecurityFilterChain然后将工作委派给SecurityFilterChain的所有Filter执行。它是在WebSecurityConfiguration里配置的
4、SecurityFilterChain
一个过滤器链由一系列Security Filter以及匹配规则组成。当一个http请求符合该SecurityFilterChain的匹配规则FilterChainProxy就会调用这个SecurityFilterChain里的所有Filter。有多个SecurityFilterChain时FilterChainProxy只会使用第一个匹配成功的SecurityFilterChain。下图为一个SecurityFilterChain的组成。 SecurityContextPersistenceFilter当请求需要认证的资源时该Filter就是过滤器链的第一个过滤器用来处理Spring Security的上下文信息也就是SecurityContext保证不同请求但是sessionId相同也就是同一用户的不同请求拿到的上下文是相同的也就是通过SecurityContextHolder.getContext()拿到的信息是同一个。
UsernamePasswordAuthenticationFilter表单认证Filter即表单方式登录校验用户名密码处理。Spring Security默认提供的认证方式之一。 BasicAuthenticationFilterBasic认证Filter弹窗输入用户名密码校验处理Spring Security默认提供的认证方式之一。
ExceptionTranslationFilter处理认证及授权过程中抛出的异常然后返回给客户端。只处理AccessDeniedException和AuthenticationException这两种异常。不是这两种异常ExceptionTranslationFilter不工作。
FilterSecurityInterceptorSecurityFilterChain过滤器链的最后一个Filter用来鉴权判断用户是否有当前请求资源的权限来决定是否放行请求。
5、Security Filter
Security Filter就是Spring Security实现具体功能的一些Filter如CsrfFilterUsernamePasswordAuthenticationFilter、AuthenticationFilterAuthorizationFilter等Spring Security默认的Filter。 这些Filter可以用于许多不同的目的如 认证、授权、漏洞保护 等等。filter 是按照特定的顺序执行的以保证它们在正确的时间被调用。我们也可以自定义Filter加入的Spring Security执行过程中。可以在应用启动时使用INFO级别的日志在控制台查看Security Filter的列表。