乐途乐途
主页
  • 计算机基础

    • TCP/IP
    • Linux
    • HTTP
  • 数据库

    • SQL
    • MySQL 5.7
  • 编程语言

    • C
    • C++
    • Java SE
    • Python2
    • Python3
  • 数据格式

    • JSON
    • XML
  • 认证与安全

    • JWT
  • 工具

    • Markdown
  • Git

    • GitFlow
  • Quartz

    • Quartz
  • Java

    • Maven 入门
    • Maven 进阶
    • MyBatis
    • Spring
    • Spring MVC
  • Java

    • Spring Boot
    • Spring Cloud
    • Spring Cloud Alibaba
    • Spring Security
    • Spring AI
    • Spring Batch
    • Kafka
    • Java 设计模式
  • 缓存

    • Redis
  • 搜索引擎

    • Elasticsearch
  • 分布式协调

    • ZooKeeper
联系
阿里云
主页
  • 计算机基础

    • TCP/IP
    • Linux
    • HTTP
  • 数据库

    • SQL
    • MySQL 5.7
  • 编程语言

    • C
    • C++
    • Java SE
    • Python2
    • Python3
  • 数据格式

    • JSON
    • XML
  • 认证与安全

    • JWT
  • 工具

    • Markdown
  • Git

    • GitFlow
  • Quartz

    • Quartz
  • Java

    • Maven 入门
    • Maven 进阶
    • MyBatis
    • Spring
    • Spring MVC
  • Java

    • Spring Boot
    • Spring Cloud
    • Spring Cloud Alibaba
    • Spring Security
    • Spring AI
    • Spring Batch
    • Kafka
    • Java 设计模式
  • 缓存

    • Redis
  • 搜索引擎

    • Elasticsearch
  • 分布式协调

    • ZooKeeper
联系
阿里云
  • 学习路径
  • 第1章 Spring Security 基础

    • 本章定位
    • Spring Security 是什么
    • DelegatingFilterProxy
    • 安全过滤器链
    • SecurityFilterChain
    • 过滤器执行顺序
  • 第2章 认证

    • 本章定位
    • Authentication
    • 认证流程
    • AuthenticationManager
    • ProviderManager
    • DaoAuthenticationProvider
    • UserDetails
    • UserDetailsService
    • PasswordEncoder
    • BCryptPasswordEncoder
    • DelegatingPasswordEncoder
    • 表单登录
    • SecurityContext
    • SecurityContextHolder
    • UsernamePasswordAuthenticationToken
  • 第3章 授权

    • 本章定位
    • 授权模型
    • GrantedAuthority
    • AccessDecisionManager
    • AccessDecisionVoter
    • URL 级别授权
    • 方法级别安全
    • @PreAuthorize
    • @PostAuthorize
    • @PreFilter
    • @PostFilter
    • @Secured
    • RoleHierarchy
  • 第4章 过滤器链

    • 本章定位
    • FilterChainProxy
    • SecurityContextHolderFilter
    • LogoutFilter
    • BasicAuthenticationFilter
    • CsrfFilter
    • CorsFilter
    • HeaderWriterFilter
    • AnonymousAuthenticationFilter
    • RequestCacheAwareFilter
    • ExceptionTranslationFilter
    • FilterSecurityInterceptor
  • 第5章 会话管理

    • 本章定位
    • 会话管理
    • SessionFixation
    • 会话并发控制
    • SessionCreationPolicy
    • RememberMe
  • 第6章 JWT

    • 本章定位
    • JWT
    • JwtDecoder
    • JWT 认证
    • JwtAuthenticationConverter
  • 第7章 OAuth2

    • 本章定位
    • OAuth2 基础
    • OAuth2 Client
    • OAuth2 Resource Server
    • 第三方登录配置
  • 第8章 攻击防护

    • 本章定位
    • CSRF 跨站请求伪造防护
    • CORS 跨域防护
    • Clickjacking 点击劫持防护
    • 安全响应头
    • Session Fixation 会话固定防护
  • 第9章 测试

    • 本章定位
    • 安全测试
    • @WithMockUser
    • 最佳实践

"小崔发现系统登录校验代码散落在三个 Controller 里,密码还是明文比对。白歌说:'Spring Security 的认证流程用标准化接口把登录这件事彻底管起来了。'这一章,你将从用户提交凭据到身份确认入库,拆解认证流程的每一颗螺丝。"

章节导读:认证

本章定位

本章解决的核心问题:Spring Security 如何从用户提交凭据(用户名/密码)到确认身份并将其存入上下文的完整认证链路。 涵盖认证接口体系、密码策略、表单登录实现,以及 SecurityContext 的线程级存储机制。

学习路线图

学习顺序说明:先建立认证全流程骨架(从请求到入库)→ 逐一拆解核心接口:Authentication(凭证载体)、AuthenticationManager(认证入口)、ProviderManager(委托分发)、DaoAuthenticationProvider(DAO 认证实现)→ 掌握用户数据层:UserDetailsService(用户查询)、UserDetails(用户领域对象)→ 理解密码策略:PasswordEncoder 接口、BCryptPasswordEncoder 实现、DelegatingPasswordEncoder 多算法兼容 → 最后掌握凭证载体与上下文存储:UsernamePasswordAuthenticationToken、SecurityContextHolder、SecurityContext。表单登录作为完整实战收尾。

文件关系说明

文件一句话角色
认证流程.md认证全流程骨架:从用户提交凭据到 SecurityContext 入库的完整链路。
Authentication.md认证接口:凭证的统一抽象,包含 Principal、Credentials、Authorities 三大核心属性。
AuthenticationManager.md认证入口:只有一个 authenticate() 方法,是认证请求的统一门面。
ProviderManager.md委托分发:维护多个 AuthenticationProvider 列表,按顺序尝试认证。
DaoAuthenticationProvider.mdDAO 认证实现:从数据库加载用户、比对密码、组装权限的标准流程。
UserDetailsService.md用户查询接口:根据用户名从数据库加载用户信息的契约。
UserDetails.md用户领域对象:封装用户名、密码、权限、过期状态等核心属性。
PasswordEncoder.md密码编码接口:统一密码比对策略(encode/matches/upgradeEncoding)。
BCryptPasswordEncoder.mdBCrypt 实现:自适应慢哈希算法,自动加盐,防御彩虹表攻击。
DelegatingPasswordEncoder.md多算法兼容:前缀识别({bcrypt}、{noop}),支持平滑迁移旧密码。
UsernamePasswordAuthenticationToken.md凭证载体:封装用户名密码的未认证/已认证两种状态。
SecurityContextHolder.md上下文存储:ThreadLocal 策略将认证信息绑定到当前线程。
SecurityContext.md上下文对象:封装 Authentication 的轻量级容器。
表单登录.md完整实战:UsernamePasswordAuthenticationFilter 的配置、自定义登录页、登录成功/失败处理。

知识图谱

核心逻辑:认证流程是一个流水线:UsernamePasswordAuthenticationFilter 从请求中提取用户名密码 → 封装为 UsernamePasswordAuthenticationToken(未认证状态)→ 提交给 AuthenticationManager → ProviderManager 委托给 DaoAuthenticationProvider → 通过 UserDetailsService 从数据库加载用户信息 → PasswordEncoder 比对密码 → 成功则生成已认证 Token → 存入 SecurityContextHolder(ThreadLocal)→ 后续请求从 SecurityContext 中复用身份。BCryptPasswordEncoder 负责安全地存储密码,DelegatingPasswordEncoder 负责兼容旧密码格式。

与上下章的衔接

上一章回顾:你建立了安全过滤器链的宏观骨架,知道请求在到达 Controller 之前会经过一系列安全过滤器。本章深入其中最关键的认证环节——过滤器链中的 UsernamePasswordAuthenticationFilter 如何触发整个认证流水线。

下一章预告:身份确认后,系统需要回答"你能做什么"。下一章「授权」将拆解 AccessDecisionManager、AccessDecisionVoter 等授权决策组件,以及 URL 级、方法级、实例级三层授权模型。

下一页
Authentication