[关闭]
@chenbinghua 2019-03-02T06:33:17.000000Z 字数 1912 阅读 811

shiro学习

shiro


Shiro用来干嘛的

如何自定义Realm进行认证

(一)使用ini文件完成认证操作

1.新建Maven空工程,导入依赖

  1. <dependency>
  2. <groupId>junit</groupId>
  3. <artifactId>junit</artifactId>
  4. <version>4.12</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>commons-logging</groupId>
  8. <artifactId>commons-logging</artifactId>
  9. <version>1.1.3</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>org.apache.shiro</groupId>
  13. <artifactId>shiro-core</artifactId>
  14. <version>1.2.2</version>
  15. </dependency>

2.创建数据源,在resources目录中添加shiro.ini的配置文件

[users]
zhangsan=666
lisi=888

3.编写登录登出逻辑

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. //1、创建SecurityManager工厂,IniSecurityManagerFactory可以从ini文件中初始化SecurityManager环境
  2. Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
  3. //2、创建SecurityManager
  4. SecurityManager securityManager = factory.getInstance();
  5. //3、将securityManager设置到运行环境中
  6. SecurityUtils.setSecurityManager(securityManager);
  7. //4、在运行环境下创建Subject
  8. Subject subject = SecurityUtils.getSubject();
  9. //5、创建token令牌,记录用户认证的身份和凭证即账号和密码
  10. UsernamePasswordToken token = new UsernamePasswordToken("zhangsan", "666");
  11. try {
  12. //6、登录,即身份验证
  13. subject.login(token);
  14. } catch (AuthenticationException e) {
  15. //7、身份验证失败
  16. e.printStackTrace();
  17. }
  18. //8、用户认证状态
  19. Boolean isAuthenticated = subject.isAuthenticated();
  20. System.out.println("用户认证状态:" + isAuthenticated);
  21. //9、用户退出
  22. subject.logout();
  23. isAuthenticated = subject.isAuthenticated();
  24. 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进行退出操作。

如何自定义Realm进行授权

Web集成

Spring应用集成

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注