shiro教程之二使用ini文件进行验证测试

项目结构

在这里插入图片描述

1、ini配置文件
[users]
##模拟数据库用户列表:账号=密码
zhangsan=666
lisi=888
2、test类
public class TestShiro {
	public static void main(String[] args) {
		//1、创建SecurityManager工厂对象,加载配置文件,创建工厂对象
		Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
		//2、通过工厂对象,创建SecurityManager对象
		SecurityManager securityManager = factory.getInstance();
		//3、将SecurityManager绑定到当前运行环境中:让系统随时随地都可以访问SecurityManager对象
		SecurityUtils.setSecurityManager(securityManager);		
		//4、创建当前登录的主体、注意:此时主体没有经过认证
		Subject subject = SecurityUtils.getSubject();
		//5、收集主体登录的身份/凭证,即账号密码
		//参数1:将要登录的用户名,参数2:登录用户的密码
		UsernamePasswordToken token = new UsernamePasswordToken("zhangsan", "666");
		//6:主体登录
		try {
			subject.login(token);
		} catch (Exception e) {
			//登录失败
			e.printStackTrace();
		}
		//7、判断等是否成功
		System.out.println("验证登录是否成功:"+subject.isAuthenticated());
		//8:登出(注销)
		subject.logout();
		System.out.println("验证登录是否成功:"+subject.isAuthenticated());
	}
}
出错信息
  • 找不到账户异常
    在这里插入图片描述
    上面出错是因为没有账户
  • 密码出错异常
org.apache.shiro.authc.IncorrectCredentialsException: Submitted credentials for token [org.apache.shiro.authc.UsernamePasswordToken - zhangsan, rememberMe=false] did not match the expected credentials.
	at org.apache.shiro.realm.AuthenticatingRealm.assertCredentialsMatch(AuthenticatingRealm.java:600)
	at org.apache.shiro.realm.AuthenticatingRealm.getAuthenticationInfo(AuthenticatingRealm.java:578)
	at org.apache.shiro.authc.pam.ModularRealmAuthenticator.doSingleRealmAuthentication(ModularRealmAuthenticator.java:180)
	at org.apache.shiro.authc.pam.ModularRealmAuthenticator.doAuthenticate(ModularRealmAuthenticator.java:267)
	at org.apache.shiro.authc.AbstractAuthenticator.authenticate(AbstractAuthenticator.java:198)
	at org.apache.shiro.mgt.AuthenticatingSecurityManager.authenticate(AuthenticatingSecurityManager.java:106)
	at org.apache.shiro.mgt.DefaultSecurityManager.login(DefaultSecurityManager.java:270)
	at org.apache.shiro.subject.support.DelegatingSubject.login(DelegatingSubject.java:256)
	at cn.com.zhangjh.shiro.TestShiro.main(TestShiro.java:37)

上面的错是因为密码错误

shiro验证流程

在这里插入图片描述

1、调用subject.login方法进行登录,其会自动委托给securityManager.login方法进行登录;
2、securityManager通过Authenticator(认证器)进行认证;
3、Authenticator的实现ModularRealmAuthenticator调用realm从ini配置文件取用户真实的账号和密码,这里使用的是IniRealm(shiro自带,相当于数据源);
4、IniRealm先根据token中的账号去ini中找该账号,如果找不到则给ModularRealmAuthenticator返回null,如果找到则匹配密码,匹配密码成功则认证通过。
5、最后调用Subject.logout进行退出操作。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值