Spring Security6.x认证架构解析

        该文主要对Spring security认证模块的架构进行解析。

整体架构图

流程解释

        1.上述出现的组件是认证模块中最为核心的一些组件,了解这些组件之间的关系,有利于掌握Spring Security的使用,在企业中使用Spring Security多是基于这种结构扩展开来的;

        2.用户名/密码由后端获取,并且需要组建成Authentication对象,此时Authentication的认证状态应为"未认证";

        3.对于Authentication,不要将其想复杂,它是一个主体,代表当前用户,包含用户名/密码/授权范围,还包含一个最重要的东西——认证状态,它贮藏在SecurityContext上下文中,这意味着你可以在过滤器中随时获取它, 一旦获取到它,认证状态也就立刻知晓,你的系统也就知晓,是否该允许这个用户访问API资源,或者是将其阻挡在外;

        4.ProviderManager,非常重要的组件,核心方法是authenticate(),顾名思义,它用于执行认证的主逻辑;它内部维护了一个list对象,这个对象是providers,list中可以放入许多个provider,authenticate()方法会迭代providers,将所有provider的认证逻辑都执行一次,如果都通过了,代表当前用户认证通过,并且随之返回一个新的Authentication,该Authentication中包含当前的认证状态——已通过;

        5.AuthenticationProvider,即ProviderManager的providers中的对象,提供具体的认证逻辑;举个例子,DaoAuthenticationProvider是具体的实现类,你可以将它添加到providers中,那么在执行认证时,实际上是执行DaoAuthenticationProvider的逻辑,它的逻辑是:将Authentication中的密码和cache(或者是jdbc)中的密码进行比较;

        6.上述图示中第二个Authentication对象,仅是更新了认证状态为已认证,除此别无二样;但是它和前一个Authentication非同一个对象,因为它是重新创建的;

        7.认证完成后,你必须将其保存在上下文中,以便过滤器可以获取到,判断是否放行,否则你之前所做的一切操作毫无意义;保存的方法是:SecurityContextHolder.getContext().setAuthentication(...);

技术细节

        暂无

小结

        1.认证架构中的核心是ProviderManager/AuthenticationProvider,即认证逻辑的提供者;后续文章会继续进一步介绍;

        2.这是最基础的认证架构,需要理解完整,后续会推出更完整的架构,包括UserDetailService,PasswordEncoder这些组件,它们在何时出现,怎么使用,都会一一叙述。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值