前言
本节内容主要介绍spring securtity安全框架的一些核心过滤器及其作用,我们都清楚spring securtity安全框架底层是基于filter过滤器实现的,采用的是责任链的设计模式,它有一条很长的过滤器链。本次spring securtity原理介绍使用的版本是5.6.8,不同版本之间可能略有差异。
正文
①WebAsyncManagerIntegrationFilter过滤器
- 将Security上下文与 Spring Web 中用于处理异步请求映射的WebAsyncManager进行集成,用于集成 Web 异步管理器。主要是创建和初始化异步请求上下文,在请求处理完成之后,清理异步请求上下文,释放资源,处理异步请求期间可能出现的异常情况,确保异步请求的稳定性和可靠性。
② SecurityContextPersistenceFilter过滤器
- 在 Web 应用程序中,当用户进行登录认证成功后,Spring Security会创建一个包含用户身份认证信息的安全上下文(SecurityContext),通常存储在 HttpSession 中。在每次 HTTP 请求到达时,检查并尝试从适当的存储位置(通常是 HttpSession)中加载安全上下文信息,将加载的安全上下文信息存储到当前的SecurityContextHolder中,以便后续的安全验证和授权处理。在 HTTP 请求处理完成之后,将更新后的安全上下文信息重新存储到适当的位置,确保安全上下文信息在不同请求之间的持久化和恢复。
③ HeaderWriterFilter过滤器
- HeaderWriterFilter"是 Spring Security 中的一个过滤器,用于向 HTTP 响应的头部添加特定的安全标头(Security Headers),增强 Web 应用程序的安全性。
④CorsFilter过滤器
- CorsFilter是Spring Security中的一个过滤器,用于防止跨站请求伪造(CSRF)攻击。会在用户登录后,为用户生成一个唯一的 CSRF 令牌,并将其存储在用户的会话中。
⑤ LogoutFilter过滤器
- 用于处理退出登录,默认匹配/logout路径,可以在SecurityFilterChain中配置
⑥ UsernamePasswordAuthenticationFilter过滤器
- 用于处理表单认证的登录请求,从表单中获取用户名和密码,封装为UsernamePasswordAuthenticationToken对象
。默认是处理post请求下的/login,其它请求不会处理,并会直接放行
⑦ ConcurrentSessionFilter过滤器
-ConcurrentSessionFilter"是Spring Security中的一个过滤器,用于处理并发会话控制。如果一个用户在同一时间内多次登录到系统,可能会导致安全问题和数据不一致性。为了解决这个问题,Spring Security 提供了ConcurrentSessionFilter来实现并发会话控制。ConcurrentSessionFilter在SpringSecurity中用于实现并发会话控制,确保每个用户在同一时间只能有一个有效的会话,从而提高应用程序的安全性。
⑧BasicAuthenticationFilter过滤器
- 检测和处理http basic认证。BasicAuthenticationFilter 的主要作用是从请求头中提取用户名和密码,并将其与预先配置的用户凭据进行比较,以验证用户的身份。
- 当客户端发送包含基本身份验证凭据的请求时,例如在请求头中添加 "Authorization" 字段,值为 "Basic <base64 编码的用户名:密码>,BasicAuthenticationFilter 检测到该请求,并从请求头中提取出凭据信息。
- 将凭据信息与预先配置的用户凭据进行比较,以验证用户的身份。如果验证成功,请求将继续进行处理;如果验证失败,将返回身份验证失败的响应。
⑨ RequestCacheAwareFilter过滤器
- RequestCacheAwareFilter 就是负责管理重定向功能的过滤器。它会在用户请求被拦截并需要进行身份验证时,缓存用户请求的URL信息。当用户通过身份验证并进行重定向到原始请求页面时,RequestCacheAwareFilter 会使用缓存的 URL 信息来确保用户能够正确地返回到原始请求页面。
⑩ SecurityContextHolderAwareRequestFilter过滤器
- 它用于将安全上下文信息传递给 HttpServletRequest 对象,以便在请求处理过程中能够方便地获取和操作安全上下文信息。
- 在请求处理过程中,将当前用户的安全信息(如认证信息、授权信息等)从 SecurityContextHolder中提取出来,并将其设置到 HttpServletRequest 对象的属性中,以便在控制器或其他组件中可以轻松地访问这些安全信息。
⑪AnonymousAuthenticationFilter过滤器
- AnonymousAuthenticationFilter"是 Spring Security中的一个过滤器,用于在用户尚未进行认证时创建一个匿名身份进行代替。这样即使用户尚未登录,系统也可以根据匿名身份进行相应的访问控制。
⑫SessionManagementFilter过滤器
- 当用户进行身份验证成功后,SessionManagementFilter负责创建新的会话,并将用户的安全上下文信息存储在会话中。
- 当会话因为超时、用户退出登录或其他原因而失效时,SessionManagementFilter负责处理该情况,例如清除会话中的安全上下文信息、执行特定的操作或重定向到登录页面等。
- SessionManagementFilter可以控制并发会话的数量,限制同一用户在多个设备或浏览器上同时存在的会话数量,以提高应用程序的安全性。
⑬ExceptionTranslationFilter过滤器
- 用于处理AccessDeniedException和 AuthenticationException异常。
⑭ FilterSecurityInterceptor过滤器
- FilterSecurityInterceptor是 pring Security 提供的核心过滤器之一,它在请求到达应用程序之前拦截并进行安全检查。其主要功能是根据配置的访问规则(如角色、权限等)对请求进行授权验证,决定是否允许用户继续执行该请求。
- 在处理请求时,FilterSecurityInterceptor 将会检查用户的身份认证情况以及用户所具有的角色和权限,并根据配置的访问规则进行匹配和验证。如果请求满足了访问规则,则允许用户继续执行请求;否则,将返回相应的错误信息或采取其他措施(如跳转到登录页面、拒绝访问等)。
- 通过配置FilterSecurityInterceptor,可以指定访问规则、配置访问权限、自定义错误处理等。这样可以保护您的应用程序免受未经授权的访问和攻击
结语
关于spring securtity的核心过滤器介绍内容到这里就结束了,我们下期见。。。。。。