前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >shiro登录认证过程

shiro登录认证过程

作者头像
六月的雨在Tencent
发布2024-03-28 20:26:21
740
发布2024-03-28 20:26:21
举报
文章被收录于专栏:CSDNCSDN
shiro登录认证过程

登录方法

可以看到已经获取到了username、password和rememberMe ,为了接下来的认证过程,我们需要获取subject对象,也就是代表当前登录用户,并且要将username和password、rememberMe 两个变量设置到UsernamePasswordToken对象的token中, 调用SecurityUtils.getSubject().login(token)方法,将 token传入; 下面来看 subject.login(token)方法

主要通过securityManager安全管理器调用securityManager.login(this, token);方法,下面来看

方法中定义了AuthenticationInfo对象来接受从Realm传来的认证信息,进入authenticate(token)方法中

继续跟进去,进入authenticator.authenticate(token)方法

再继续跟进去看doAuthenticate(token)方法的实现

其中,this.assertRealmsConfigured();是判断当前的realm是否存在,不存在则抛出异常

当前项目中只配置了一个realm,则会进入doSingleRealmAuthentication((Realm)realms.iterator().next(), authenticationToken)方法,并且会将 realm和token作为参数传入,这里的realm其实就是自己定义的UserRealm,继续进入doSingleRealmAuthentication方法

这里会先判断realm是否支持token,然后进入else方法执行realm.getAuthenticationInfo(token)方法,继续跟进

this.getCachedAuthenticationInfo(token)这个方法是从shiro缓存中读取用户信息,如果没有,才从realm中获取信息。如果是第一次登陆,缓存中肯定没有认证信息,所以会执行this.doGetAuthenticationInfo(token)这个方法,

在执行登录认证的时候需要选择我们自己实现的realm方法

读取数据库信息进行验证,并封装成SimpleAuthenticationInfo中返回 再次查看getAuthenticationInfo

assertCredentialsMatch(token, info)方法用于密码校验,点进去可以看到

cm.doCredentialsMatch(token, info)执行密码校验

点进去可以看到

通过从token中取出的密码与从数据库取出的info中的密码进行比较,认证相同返回true;失败就返回false,并抛出AuthenticationException,将info返回到defaultSecurityManager中,到此认证过程结束 参考文献

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • shiro登录认证过程
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档