shiro第一个程序

工程结构




其中shiro-first.ini配置文件在这里充当数据库了

[users]
zhangsan=111111
lisi=22222

具体流程:

	@Test
	public void testLoginAndLogout(){
		
		//创建securityManager工厂,通过ini配置文件创建securityManager
		Factory<org.apache.shiro.mgt.SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro-first.ini");
		
		//通过factory工厂,创建securityManager
		SecurityManager securityManager = factory.getInstance();
		
		//将securityManager设置当前的运行环境中
		SecurityUtils.setSecurityManager(securityManager);
		
		//从SecurityUtils里面创建一个subject,subject就是主体
		Subject subject = SecurityUtils.getSubject();
		
		//在认证提价前,准备token,token就是一个令牌,用户和密码
		UsernamePasswordToken token = new UsernamePasswordToken("zhangsan","111111");
		
		//执行认证的提交
		try {
			//执行认证的提交,认证不通过就会抛出异常
			subject.login(token);
		} catch (AuthenticationException e) {
			e.printStackTrace();
		}
		
		//这是认证是否通过,返回的是boolean类型的数据类型
		boolean isAuthenticated = subject.isAuthenticated();
		System.out.println("是否认证通过"+isAuthenticated);
		
		//退出
		subject.logout();
		
		//当用户退出的时候,认证是否还通过
		isAuthenticated = subject.isAuthenticated();
		System.out.println("是否认证通过"+isAuthenticated);
		
	}



具体实现的原理如下:


1.通过ini配置文件创建securityManager,这相当于springmvc中的前端控制器,负责调控整个认证的过程,但是他本身是不干活的


2.调用subject.login,提交token,token前面已经准备好了的


3.当执行subject.login(token)这个方法的时候,token会传递到securityManager,securityManager将token交给

ModularRealmAuthenticator进行认证


4.ModularRealmAuthenticator将token交给IniRealm,IniRealm从shiro-first.ini查询用户信息,

IniRealm根据账号查询用户名和密码出来,

IniRealm如果查询到用户信息,IniRealm就给ModularRealmAuthenticator返回用户信息(包括用户名和密码)

IniRealm如果没有查到用户信息,就给ModularRealmAuthenticator返回null,

ModularRealmAuthenticator接受IniRealm返回Authentication认证信息

如果IniRealm返回的认证是null,ModularRealmAuthenticator抛出异常(org.apache.shiro.authc.UnknownAccountException)
如果返回的认证信息不是null(说明IniRealm找到了用户),ModularRealmAuthenticator对IniRealm返回用户密码

和token中的密码进行对比,如果不一致抛出异常(org.apache.shiro.authc.IncorrectCredentialsException)















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值