SS中的CSRF,passwordEncoder,authenticationProvider,authenticationManager,securityFilterChain几个概念及调用时机

📅 发布时间:2026/7/6 7:43:12 👁️ 浏览次数:
SS中的CSRF,passwordEncoder,authenticationProvider,authenticationManager,securityFilterChain几个概念及调用时机
一、CSRF 令牌Cross-Site Request Forgery作用防「跨站请求伪造攻击」比如你登录银行网站后黑客诱导你点他的链接利用你的登录状态偷偷转走你的钱CSRF 令牌就是给每个请求加「专属验证码」确保请求是你主动发起的不是黑客伪造的。什么时候不用前后端分离项目Vue/React Spring Boot JWT 认证时必须禁用因为 JWT 是放在请求头里的黑客拿不到而 CSRF 令牌主要保护「基于 Cookie 的会话认证」和 JWT 不兼容。二、核心组件作用 调用时机组件名核心作用调用时机passwordEncoder密码编码器1. 存密码时把明文密码123456加密成密文$2a$10$xxx存数据库防泄露2. 验证时把用户输入的明文密码加密后和数据库密文对比- 注册 / 修改密码调用encode()加密- 登录验证Spring Security 自动调用matches()对比密码authenticationProvider认证提供者「实际干活的人」负责查数据库拿用户信息 调用 passwordEncoder 验证密码判断账号密码是否正确登录时比如调用/api/auth/loginAuthenticationManager 会把认证请求交给它处理authenticationManager认证管理器「调度员」不自己干活接收登录请求后转发给 authenticationProvider 处理返回认证结果成功 / 失败- 登录接口手动调用比如authManager.authenticate(...)- Spring Security 自动处理表单登录时调用securityFilterChain安全过滤链「大门保安」所有请求进来先过它这关负责1. 禁用 CSRF、设置无状态会话2. 判断哪些接口不用登录比如 /login、哪些需要3. 把请求交给 JWT 过滤器验证 Token项目启动时加载规则每个 HTTP 请求都会触发它的规则检查三、一句话串联调用流程登录场景用户调/api/auth/login传账号密码 →securityFilterChain先检查这个接口放行不用认证代码里调用authenticationManager处理登录请求 → 它把请求转给authenticationProviderauthenticationProvider查数据库拿用户密文密码 → 调用passwordEncoder对比用户输入的明文和数据库密文密码正确 → 生成 JWT 返回密码错误 → 认证失败。四、补充JWT 场景的额外调用非登录请求比如/api/invoicessecurityFilterChain检查这个接口需要认证 → 先调用JwtAuthenticationFilter过滤器验证 Token 有效后 → 调用authenticationManager/authenticationProvider加载用户权限最后通过securityFilterChain的权限规则判断用户是否能访问该接口。总结CSRF 令牌保护 Cookie 认证JWT 场景禁用passwordEncoder只干「加密 / 对比密码」一件事authenticationProvider实际查库 验证密码authenticationManager调度认证请求securityFilterChain所有请求的第一道安全关卡管规则、管过滤器。