SpringSecurity认证流程分析

SpringSecurity使用数据库数据完成认证

认证流程

先看主要负责认证的过滤器UsernamePasswordAuthenticationFilter,有删减,注意注释。

image-20200919194541154

image-20200919194554290

上面的过滤器的意思就是,我们发送的登录请求,请求地址需要是 /login,请求方法 post,然后用户名 username,密码为 password

AuthenticationManager

由上面源码得知,真正认证操作在AuthenticationManager里面!然后看AuthenticationManager的实现类ProviderManager:

image-20200919195156738

image-20200919195209419

AbstractUserDetailsAuthenticationProvider

咱们继续再找到AuthenticationProvider的实现类AbstractUserDetailsAuthenticationProvider

image-20200919195243996

AbstractUserDetailsAuthenticationProvider中authenticate返回值

按理说到此已经知道自定义认证方法的怎么写了,但咱们把返回的流程也大概走一遍,上面不是说到返回了一个 UserDetails对象对象吗?跟着它,就又回到了AbstractUserDetailsAuthenticationProvider对象中authenticate方法的最后一行了。

image-20200919195340553

UsernamePasswordAuthenticationToken

来到UsernamePasswordAuthenticationToken对象发现里面有两个构造方法

image-20200919195400048

image-20200919195407334

AbstractAuthenticationToken

再点进去super(authorities)看看:

image-20200919195433849

由此,咱们需要牢记自定义认证业务逻辑返回的UserDetails对象中一定要放置权限信息啊!

现在可以结束源码分析了吧?先不要着急!

咱们回到最初的地方UsernamePasswordAuthenticationFilter,你看好看了,这可是个过滤器,咱们分析这么 久,都没提到doFilter方法,你不觉得心里不踏实?

可是这里面也没有doFilter呀?那就从父类找!

AbstractAuthenticationProcessingFilter

点开AbstractAuthenticationProcessingFilter,删掉不必要的代码!

image-20200919195547370

image-20200919195601300

 可见AbstractAuthenticationProcessingFilter这个过滤器对于认证成功与否,做了两个分支,成功执行 successfulAuthentication,失败执行unsuccessfulAuthentication。

在successfulAuthentication内部,将认证信息存储到了SecurityContext中。并调用了loginSuccess方法,这就是 常见的“记住我”功能!此功能具体应用,咱们后续再研究!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值