Spring Security总体流程、认证流程、鉴权流程浅析

发布时间:2021-07-27 07:25:44

软硬件环境


jdk1.8IntelliJIdeaSpringBoot2.2.1.RELEASESpringSecurity5.2.1RELEASE

声明 SpringSecurity默认提供的登录方式有表单登录与弹框登录。本文流程图,基于SpringSecurity的表单登录绘制;表单登录与弹框登录流程几乎一致,明白了其中一个的流程,就明白了整个流程了。


Spring Security总体流程分析

????????SpringSecurity框架的FilterChainProxy$VirtualFilterChain类里面,持有着两大过滤器字段一是SpringSecurity附加的过滤器List additionalFilters一是应用本身的过滤器FilterChain originalChain(过滤链里面的过滤器)。SpringSecurity会先过滤其提供的additionalFilters,然后再过滤应用本身的过滤器,总体流程如下图所示:



认证流程分析

????????认证抽象类AbstractAuthenticationProcessingFilter持有private RequestMatcher requiresAuthenticationRequestMatcher,此匹配器决定当前AbstractAuthenticationProcessingFilter类(的实现子类)是否对当前请求进行认证。如果需要认证,那么就进行认证。认证操作,实际是由AuthenticationProvider(接口的实现)完成的。认证抽象类AbstractAuthenticationProcessingFilter持有AuthenticationManager接口对象,该对象(一般由ProviderManager提供实现),ProviderManager持有AuthenticationProvider对象集合。认证时,就是遍历AuthenticationProvider对象集合,只要有一个AuthenticationProvider认证成功了,那么就认证通过,见下图:


而AuthenticationProvider接口的实现较多,有:

所以,认证流程,总体上是这样的:

注:如果需要认证,但是又认证失败的话,会抛出异常。


注:假设a、b、c都是抽象类AbstractAuthenticationProcessingFilter的子类,如果a、b、c 都能成功匹配同一个url(即:访问该url时,request会依次被a、b、c进行过滤认证),那么一旦a、b、c中有一个认证失败,那么就认证不通过。如果a、b、c都认证成功,那么是认证通过的,不过此时用户的信息数据,是以最后一个认证器存的数据为准的。


所以,如果自定义了多个认证过滤器(即AbstractAuthenticationProcessingFilter子类)的话,建议每个认证过滤器都匹配不同的url

【如果a、b、c 都能成功匹配同一个url(即:访问该url时,request会依次被a、b、c 进行过滤认证)】中,【request会依次被a、b、c 进行过滤认证】的前提是:前面的认证过滤器没有做什么“截断”操作(如请求转发,请求重定向等)。

Spring Security中,只要某一个认证器认证成功,就会调用到AbstractAuthenticationTargetUrlRequestHandler类中的handle方法,将请求重定向一个新的URL(这个URL的具体地址由AbstractAuthenticationTargetUrlRequestHandler类中的handle方法提供)。也就是说,Spring Security默认的,如果多个认证过滤器同时匹配同一个登录URL的话,如果自己不作特殊处理,只有排在最前的那个认证器生效



鉴权流程分析

????????鉴权流程相对简单。AbstractSecurityInterceptor抽象类中有一个方法public abstract SecurityMetadataSource obtainSecurityMetadataSource(),其子类需要重写该方法,使其能获得一个SecurityMetadataSource实例,这个实例用来判定当前请求是否需鉴权;AbstractSecurityInterceptor抽象类中有一个字段private AccessDecisionManager accessDecisionManager,其子类需要给这个字段赋一个AccessDecisionManager实例,这个实例用来判定鉴权是否通过(如果需要鉴权的话),见下图:

如果有多个鉴权过滤器的话:



Spring Security基础理论梳理完毕 !




^_^ 如有不当之处,欢迎指正


^_^ 参考资料

^_^ 本文已经被收录进《程序员成长笔记(六)》,笔者JustryDeng

相关文档

  • 快乐的寓言故事
  • 青苔
  • 孙陶然:战略目标一定要定得现实可执行
  • 数码相机小技巧妙用
  • 35+的程序员都去哪儿了?所谓“青春饭”真只是在贩卖焦虑吗?
  • seo网站改动方案要充分的数据统计分析作为前提的
  • 小学个人教学工作计划表
  • 莲安情感散文
  • 谈谈您对Spring框架的理解
  • Win 10 隐藏功能:不用任何软件就可实现手机投屏到电脑
  • 十字绣新款枕头图案
  • 提升菜鸟销售能力的技巧有哪些
  • 安全生产法的工作情况汇报情况
  • 寿司广告宣传海报设计素材
  • 印发文件请示
  • 四辩总结陈词
  • 2020年考研数学复习计划范文
  • RabbitMQ怎样保证消息不丢失?
  • 《笑猫日记:那个黑色的下午》读后感400字
  • 网络工程论文精选范文
  • 简单幸福的句子说说心情
  • 学生会开学讲话稿
  • 平均值方法:Avg API-Medoo使用指南
  • 兰兰的生活日记之班级吵闹
  • 关于毕业答辩PPT演讲的技巧有哪些
  • 企业退伍军人慰问信范文精选
  • 暑期三下乡调研实践总结
  • 常识梁文道mobi
  • 精美的隶书书法作品字帖图片
  • 推荐借款合同模板集合9篇
  • 猜你喜欢

  • 移动web之滚动篇
  • 教育学课件 第三章 教育与人的发展
  • 化妆品项目投资策划书 (4)
  • 评布什政府酝酿改造大中东的计划
  • 土茯苓功效与作用
  • 语文第8课借书不还天打雷劈课件1ppt精品文档
  • 2019精品家庭卫生与健康5课件英语
  • 老人与海读书笔记好句摘抄及感悟
  • 配套K12河北省2019届中考数学系统复* 第一单元 数与式 第4讲 二次根式(8年真题训练)练*
  • 文化安全 智慧安全——幼儿园安全文化建设的实践
  • 机采队队长安全生产责任制
  • 天津市宝坻区利丰纺织品有限公司(企业信用报告)- 天眼查
  • (人教版)高中语文全程复*方略:熟语(含成语
  • 教育信息化转型中的教师专业发展反思
  • 五年级数学上册小数乘除法应用题
  • 海泡石的改性研究
  • 母猪管理的五个误区与纠正方法
  • 乌鲁木齐市西北机电公司企业信用报告-天眼查
  • 2017年最新入党积极分子思想汇报优秀范文
  • 市档案局档案安全情况自查报告
  • 关于货运代理责任保险(务实)
  • 2013北航研究生雷达课件许小剑第十章
  • 2019-2025年中国汽车纺织品市场深度调研与发展前景分析报告
  • 贵州省建设工程竣工验收备案表
  • 胃食管反流病亚太地区共识会议
  • 南京玛索服饰有限公司上海青浦店企业信用报告-天眼查
  • 新家色彩搭配四大关键点
  • 深圳银监局关于中信银行股份有限公司深圳福强支行开业的批复
  • 现场会欢迎词
  • 畜禽养殖家庭农场发展情况调研报告
  • 女孩夏天吃什么比较好
  • 2021中央电视台寻找最美孝心少年颁奖典礼观后感
  • 个人所得税法旧差异对照表
  • 注册公司时如何填写公司注册地址?【憨牛网】
  • 湖南喜东家食品有限公司(企业信用报告)- 天眼查
  • 优一头能见证奇迹的时刻
  • 在教师节庆祝大会上的讲话稿
  • 现在女生学什么好
  • 什么聊天软件里有创业群之类的
  • excel,表格合并工具
  • 企业经营战略选择和发展
  • 广告代理合同样本(合同范本)