专栏名称: 芋道源码
纯 Java 源码分享公众号,目前有「Dubbo」「SpringCloud」「Java 并发」「RocketMQ」「Sharding-JDBC」「MyCAT」「Elastic-Job」「SkyWalking」「Spring」等等
目录
相关文章推荐
芋道源码  ·  Spring Cloud Gateway ... ·  18 小时前  
芋道源码  ·  面试官:int(1) 和 int(10) ... ·  18 小时前  
Java编程精选  ·  330个“假补丁”差点混入主线?LinusT ... ·  昨天  
芋道源码  ·  入职第一天,看了公司代码,牛马沉默了 ·  昨天  
51好读  ›  专栏  ›  芋道源码

Spring-Security 认证流程分析及多方式登录认证实践

芋道源码  · 公众号  · Java  · 2025-06-07 21:45

正文

请到「今天看啥」查看全文


  • 6 总结

  • 1 前言

    在项目开发过程中,会涉及到安全框架的配置。其中常用的就是 shiro 和 spring-security ,在本文中将介绍 spring-security 的工作流程和实践应用,并基于此总结其使用心得和项目配置关键。

    基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

    • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro
    • 视频教程:https://doc.iocoder.cn/video/

    2 spring security 认证和权限流程

    如上图所示,一个请求在达到控制器之前,会经过一系列的过滤器 DefaultSecurityFilterChain ,绿色的部分负责用户认证,蓝色的部分处理认证异常的情况,橙色的部分负责用户的授权,最终请求到控制器的方法。在认证完成之后,会将用户认证的结果 Authentication 放进 SecurityContextHolder 中,从中可以获取到用户信息。

    在开始之前,需要先介绍一下其他重要的组件

    • SecurityContextHolder: 存放身份信息的容器
    • Authentication: 用户信息的抽象即 security 的认证主体
    • AbstractAuthenticationToken: authentication 即认证主体的抽象类,
    • AuthenticationManager: 身份认证器接口,具体实现类为 ProviderManager
    • AuthenticationProvider: 用来处理 authentication 的认证信息
    • AuthenticationSuccessHandler 认证成功处理器
    • AuthenticationFailureHandler 认证失败处理器

    认证的流程如下所示:

    1、用户请求的接口经过 security 过滤器,按照其登录方式适配的 authentication 封装其认证方法,通过 AuthenticationProvider 来进行处理认证。获取身份信息会按照其配置provider的顺序来处理。

    2、通常情况下将身份信息封装到封装成 Authentication 下的实现类 UsernamePasswordAuthenticationToken , 通常是用户密码的登录方式。

    3、通过 AuthenticationManager 身份管理器,通过其配置的provider 验证这个 UsernamePasswordAuthenticationToken 的信息。

    4、认证逻辑一般是在 service 中,认证成功之后会返回认证信息, AuthenticationManager.authentication 身份管理器返回一个 Authentication 实例(上下文中包含权限信息,身份信息,细节信息,但是密码会被移除)。

    5、 SecurityContextHolder 上下文容器会填充 UsernamePasswordAuthenticationToken 信息,通过







    请到「今天看啥」查看全文