Spring Boot 2.1.5.RELEASE Spring Security 版本:5.1.5-RELEASE Spring Security 官方文档

基于 Servlet Security 从整体架构上了解:Authentication(身份认证)、Authorization(授权)、Protection Against Exploits(常规漏洞防范)。

一、从 Filter 开始

1.1、从 Filter 开始

在以 Servlet 为容器的应用中,Spring Security 的实现基于标准的 Servlet Filter。

所以学习了解 Spring Security 要从 Filter 开始。

首先来看一张图,下图是处理当个请求时,Servlet Filter 处理的典型分层
image.png
Client 发送一个请求到应用中。
Servlet 容器会创建 FilterChainFilterChain 包含了 所有的 FilterServlet 。并以此处理请求 URL。

由于 FilterChain 可以包含多个 Filter ,上游的 Filter 回影响到下游的 FilterServlet 的执行,所以 Filter 的顺序很重要。

1.2、Spring Security 不一样的 Filter

image.png
在 Spring Security Servlet 实现中,Spring Security 通过几组定义丰富了Filter 实现。

  • DelegatingFilterProxy(委托过滤代理)
    DelegatingFilterProxy 持有 FilterChainProxy
    并实现了如下接口
    • Filter
    • InitializingBean
    • EnvironmentAware
  • FilterChainProxy(过滤链代理)
    FilterChainProxy 持有多个 SecurityFilterChain
  • SecurityFilterChain(安全过滤器链)
    SecurityFilterChain 持有了真正实现处理逻辑的过滤器 Filter 列表。
    SecurityFilterChain 中多个 Filter 的执行顺序:文档

    二、Handling Security Exceptions

    针对安全认证等异常 Spring Security 提供了 ExceptionTranslationFilter 进行处理。
    ExceptionTranslationFilter 能够处理将 AccessDeniedExceptionAuthenticationException 转换成 HTTP 响应返回。
    ExceptionTranslationFilter 作为一个 Security Filters 被 FilterChainProxy 持有。

    2.1、ExceptionTranslationFilter 处理流程

    image.png

    只有当程序抛出 AccessDeniedException 和 AuthenticationException ,ExceptionTranslationFilter 才会处理。

三、Authentication

3.1、architecture components

  • SecurityContextHolder
    存放已认证用户信息
  • SecurityContext
    从SecurityContextHolder获得,包含当前经过身份验证的用户的身份验证信息。

  • Authentication
    可以是 AuthenticationManager 的输入,也可以是 SecurityContext 中当前用户 提供的已认证过的用户凭证。

  • GranteAuthority
    在身份认证过程中被授予主体的权限。

  • AuthenticationManager
    API 定义:Spring Security 如何进行身份认证。

  • ProviderManager
    AuthenticationManager 最常见的实现。

  • AuthenticationProvider
    使用 ProviderManager 进行特殊类型的身份认证。

  • Request Credentials with AuthenticationEntryPoint
    用于从客户端获取凭证

  • AbstractAuthenticationProcessingFilter
    用于身份认证的基础 Filter。
    通过该类能够了解身份认证流程及各个组件间的流程关系。

3.2、Authentication Mechanisms

Spring Security 提供的认证机制

  • Username and Password
  • OAuth 2.0 Login
  • SAML 2.0 Login
  • Central Authentication Server (CAS)
  • Remember Me
  • JAAS Authentication
  • OpenID
  • Pre-Authentication Scenarios
  • X509 Authentication