《Spring Security》文档笔记

SpringSecurity 是一个强大的、高度可定制的身份验证和访问控制框架,它是确保基于 Spring 的应用程序安全的事实标准。
Spring Security is a powerful and highly customizable authentication and access-control framework. It is the de-facto standard for securing Spring-based applications.

笔记的版本为 Spring Security-4.0 与 Spring Framework 5.0.5.RELEASE。这个笔记只是把 Spring Security 的 Docs 简化并抄了一遍(算是 google 翻译加官方文档的省略版,哈哈),也可以自己去看,传送门

目录

第一部分 基本介绍

  1. 前言
    1. 介绍什么是 SpringSecurity
    2. Spring Security 的几种认证方式
    3. Spring Security 的包目录结构
  2. Spring Security 配置
    1. 开启 HttpSecurity 配置
    2. 处理登录请求
    3. 授权请求,验证 url
    4. 处理登出请求
    5. JDBC、Memory 认证
    6. 多重 HttpSecurity 配置
  3. 方法级别的安全配置
    1. 开启方法安全配置
    2. 两种方法级别的注释
  4. 示例

第二部分 体系结构和实现

  1. SpringSecurity 的核心组件
    1. SecurityContextHolder - Security 上下文
    2. SecurityContext - 从上下文中获取当前用户主体
    3. Authentication - 当前用户主体信息
    4. GrantedAuthority - 用户权限
    5. UserDetails - 用户主体的具体实现
    6. UserDetailsService - 加载当前用户主体的实现
  2. SpringSecurity 身份认证流程
    1. 模拟一个标准的身份认证环境
    2. web 程序中的身份认证流程
    3. 认证流程中的核心对象
    4. 安全拦截器与安全对象模型
    5. Security 与 AOP 的 around 通知
  3. 第七章 Spring Security 中的核心服务
    1. UsernamePasswordAuthenticationFilter - 用户名密码登录过滤器(责任链模式)
    2. ProviderManager - 认证管理类(迭代器模式)
    3. DaoAuthenticationProvider - 数据认证
    4. UserDetailsService - 获取具体用户实体
    5. PasswordEncoder - 用户密码加密
    6. UserDetails - 用户对象

第三部分 测试支持

  1. Spring Security 的单元测试支持
    1. @WithMockUser - 使用 Mock 的对象
    2. @WithAnonymousUser - 使用匿名 Mock 对象
    3. @WithUserDetails - 使用 DB 中的对象,需要数据库连接
  2. 自定义测试注解
    1. 模仿@WithMockUser - 使用自定义的对象
    2. 重写 WithSecurityContextFactory - 生成自定义的对象,并注入 SecurityContextHolder
  3. Spring Security 对 WebFlux 测试的支持
    1. TODO:没用过 WebFlux,等我学到了再回来补充,flag 先立起来

第四部分 Web 应用安全原理

  1. 安全过滤器链

    1. Filter Ordering - 过滤链顺序如下

      1. ChannelProcessingFilter - 确保 web 请求会被 channel 通过
      2. SecurityContextPersistenceFilter - 加载 SecurityContext
      3. ConcurrentSessionFilter - 监听 session 是否改变
      4. AbstractPreAuthenticationProcessingFilter - 抽象身份验证处理过滤器
        1. UsernamePasswordAuthenticationFilter - 用户名密码验证
        2. CasAuthenticationFilter - Cas 验证
        3. BasicAuthenticationFilter - Basic 验证,请求头认证的一种
        4. ……
      5. SecurityContextHolderAwareRequestFilter - ServletAPI 与 Security 之间的包装类
      6. JaasApiIntegrationFilter
      7. RememberMeAuthenticationFilter - 以 cookie 方式进行身份验证
      8. AnonymousAuthenticationFilter - 匿名身份验证
      9. ExceptionTranslationFilter - 异常处理
      10. FilterSecurityInterceptor - HTTP 资源的安全处理
  2. 核心过滤器

    1. FilterSecurityInterceptor
    2. ExceptionTransactionFilter
    3. SecurityContextPersistenceFilter
    4. UsernamePasswordAuthenticationFilter
  3. Spring Security 与 Servlet API 的集成

    1. getRemoteUser() - 登录用户名
    2. getUserPrincipal() - 登录用户
    3. isUserInRole(String) - 是否存在权限(去掉 ROLE 前缀)
    4. authenticate(HttpServletRequest,HttpServletResponse) - 是否通过了验证
    5. login(String,String) - 登录
    6. logout() - 登出
    7. changeSessionId() - 改变 session id
  4. Basic Authentication

  5. Remember-Me Authentication - “记住我”功能的实现

    1. Simple Hash-Based Token Approach - 简单 hash 令牌,不建议使用
    2. Persistent Token Approach - 持久令牌,使用 datasource 存储
  6. CSRF

  7. CORS - HTTP 请求控制

  8. HTTP Response Headers

  9. Session Management - 会话管理

    1. SessionManagementFilter - session 与 security-context 的管理
    2. SessionAuthenticationStrategy - session 相关的认证策略
    3. 固化攻击、会话超时、会话数量限制
  10. Anonymous Authentication - 匿名身份认证

  11. WebSocket Security

第五部分 授权体系原理

  1. Authorization Architecture - 授权体系结构
  2. Secure Object Implementations - 安全对象实现
    1. 使用 AOP 进行安全对象的保护
  3. Expression-Based Access Control - 基于表达式的访问控制
    1. PreAuthority(“hasRole(‘USER’)”)
    2. PreAuthority(“hasPermission(#contact, ‘ADMIN’)”)

第六部分 单点登录 CAS 与 OAuth2

  1. LDAP
  2. OAuth2.0
  3. JSP
  4. JAAS
  5. CAS

第七部分 Spring Data 集成

  1. Dependencies

笔记来源于 https://docs.spring.io/spring-security/site/docs/5.0.5.RELEASE/reference/htmlsingle

文章作者: koral
文章链接: http://luokaiii.github.io/2019/07/18/读书笔记/《SpringSecurity》/0.目录/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自