04_图解Shiro认证源码,非常易懂

首先准备一段Shiro认证的代码,在**subject.login(token)**处打断点

// 创建SecurityManager
DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();

// 设置Realm,Realm是包含用户登录信息的文件
defaultSecurityManager.setRealm(new IniRealm("classpath:shiro.ini"));

//将安装工具类中设置默认安全管理器
SecurityUtils.setSecurityManager(defaultSecurityManager);

//获取主体对象
Subject subject = SecurityUtils.getSubject();

// 创建Token
UsernamePasswordToken token = new UsernamePasswordToken("yyh1", "123");

try {
    
    
    subject.login(token);//用户登录
    System.out.println("登录成功~~");
} catch (UnknownAccountException e) {
    
    
    System.out.println("用户名错误!!");
    e.printStackTrace();
} catch (IncorrectCredentialsException e) {
    
    
    System.out.println("密码错误!!!");
    e.printStackTrace();
}

在这里插入图片描述
首先先知道idea中按键的作用在这里插入图片描述
文章中关键词介绍:
跨过(Step Over)
步入(Step Into)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
此时,我们发现,Shiro只调用了getAuthenticationInfo()方法去获得用户名信息,并没有做密码校验
在这里插入图片描述
在这里插入图片描述
可以看得到密码校验在此处,密码校验失败会抛出IncorrectCredentialsException异常
在这里插入图片描述
源码已经分析完了,可以得出了几个很重要的部分

  • UnknownAccountException异常
  • IncorrectCredentialsException异常
  • getAuthenticationInfo()方法

在源码分析过程中可以看出,Shiro的用户校验需要通过getAuthenticationInfo()方法获取用户信息,而我们如果想要实现自己的Realm去判断用户信息的合法性,只需要去覆写doGetAuthenticationInfo()方法(该方法没有在源码分析过程中遇到过,本文仅介绍实现自定义Realm为什么要覆写doGetAuthenticationInfo()方法

Guess you like

Origin blog.csdn.net/Vampire69/article/details/118489911