@chenbinghua
2019-03-01T22:33:17.000000Z
字数 1912
阅读 981
shiro
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.1.3</version></dependency><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-core</artifactId><version>1.2.2</version></dependency>
[users]
zhangsan=666
lisi=888
3.1创建SecurityManger工厂对象.IniSecurityManagerFactory
3.2通过工厂对象创建SecurityManger对象
3.3把SecurityManger对象绑定到当前的运行环境中.SecurityUtils.setSecurityManager(securityManager);
3.4创建主体对象.SecurityUtils.getSubject();
3.5创建登录的令牌对象UsernamePasswordToken
3.6主体登录方法(登录失败会抛出异常)
3.7主体登录subject.logout();
//1、创建SecurityManager工厂,IniSecurityManagerFactory可以从ini文件中初始化SecurityManager环境Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");//2、创建SecurityManagerSecurityManager securityManager = factory.getInstance();//3、将securityManager设置到运行环境中SecurityUtils.setSecurityManager(securityManager);//4、在运行环境下创建SubjectSubject subject = SecurityUtils.getSubject();//5、创建token令牌,记录用户认证的身份和凭证即账号和密码UsernamePasswordToken token = new UsernamePasswordToken("zhangsan", "666");try {//6、登录,即身份验证subject.login(token);} catch (AuthenticationException e) {//7、身份验证失败e.printStackTrace();}//8、用户认证状态Boolean isAuthenticated = subject.isAuthenticated();System.out.println("用户认证状态:" + isAuthenticated);//9、用户退出subject.logout();isAuthenticated = subject.isAuthenticated();System.out.println("用户认证状态:" + isAuthenticated);
1、调用subject.login方法进行登录,其会自动委托给securityManager.login方法进行登录;
2、securityMana ger通过Authenticator(认证器)进行认证;
3、Authenticator的实现ModularRealmAuthenticator调用realm从ini配置文件取用户真实的账号和密码,这里使用的是IniRealm(shiro自带,相当于数据源 );
4、IniRealm先根据token中的账号去ini中找该账号,如果找不到则给ModularRealmAuthenticator返回null,如果找到则匹配密码,匹配密码成功则认证通过。
5、最后调用Subject.logout进行退出操作。