Shiro--简单使用

布满荆棘的人生 2021-08-24 20:07 575阅读 0赞

创建Maven项目,添加依赖

  1. <dependencies>
  2. <dependency>
  3. <groupId>junit</groupId>
  4. <artifactId>junit</artifactId>
  5. <version>4.12</version>
  6. <scope>test</scope>
  7. </dependency>
  8. <!-- shrio依赖 -->
  9. <dependency>
  10. <groupId>org.apache.shiro</groupId>
  11. <artifactId>shiro-core</artifactId>
  12. <version>1.4.1</version>
  13. </dependency>
  14. <!--用于slf4j与log4j2保持桥接 -->
  15. <dependency>
  16. <groupId>org.apache.logging.log4j</groupId>
  17. <artifactId>log4j-slf4j-impl</artifactId>
  18. <version>2.12.1</version>
  19. <scope>test</scope>
  20. </dependency>
  21. <dependency>
  22. <groupId>org.apache.shiro</groupId>
  23. <artifactId>shiro-ehcache</artifactId>
  24. <version>1.4.1</version>
  25. </dependency>
  26. <dependency>
  27. <groupId>org.ehcache</groupId>
  28. <artifactId>ehcache</artifactId>
  29. <version>3.8.0</version>
  30. </dependency>
  31. <dependency>
  32. <groupId>org.apache.shiro</groupId>
  33. <artifactId>shiro-spring</artifactId>
  34. <version>1.4.1</version>
  35. </dependency>
  36. </dependencies>

配置文件

log4j2.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration>
  3. <!--先定义所有的appender-->
  4. <appenders>
  5. <!--输出控制台的配置-->
  6. <console name="Console" target="SYSTEM_OUT">
  7. <!--输出日志的格式-->
  8. <!--<patternlayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%p] %c %m %n"/>-->
  9. <patternlayout pattern="[%p] %m %n"/>
  10. </console>
  11. </appenders>
  12. <!-- 然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
  13. <!-- 日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
  14. <loggers>
  15. <root level="DEBUG">
  16. <!--输出到控制台-->
  17. <appender-ref ref="Console"/>
  18. </root>
  19. <!--org.springframework <logger name="org.springframework" level="INFO"/>-->
  20. </loggers>
  21. </configuration>

shiro.ini

  1. [users]
  2. zhangsan=123456,admin
  3. lisi=654321,public
  4. [roles]
  5. admin=product:view,product:create,product:update,product:delete
  6. public=product:view

测试:

  1. @Test
  2. public void test01() {
  3. //1.初始化shiro的安全管理器
  4. DefaultSecurityManager securityManager = new DefaultSecurityManager();
  5. //2.设置用户的权限信息到安全管理器
  6. Realm realm = new IniRealm("classpath:shiro.ini");
  7. securityManager.setRealm(realm);
  8. //3. 使用SecurityUtils将securityManager设置到运行环境中
  9. SecurityUtils.setSecurityManager(securityManager);
  10. //4. 创建一个Subject实例
  11. Subject subject = SecurityUtils.getSubject();
  12. //5. 创建用于认证的认证的token,记录用户认证的身份和凭证即账号和密码
  13. AuthenticationToken token =
  14. new UsernamePasswordToken("zhangsan", "123456");
  15. System.out.println("用户认证状态:" + subject.isAuthenticated());
  16. //6.主体要进行登录,登录的时候进行认证检查
  17. subject.login(token);
  18. // 用户认证状态
  19. System.out.println("用户认证状态:" + subject.isAuthenticated());
  20. //7.检查角色的授权状态
  21. System.out.println("是否拥有admin角色: " + subject.hasRole("admin"));
  22. System.out.println("是否拥有public角色: " + subject.hasRole("public"));
  23. //8.检查权限的授权状态
  24. System.out.println("product:view: " + subject.isPermitted("product:view"));
  25. System.out.println("product:view: " + subject.isPermitted("product:view", "product:update2")[1]);
  26. //退出
  27. subject.logout();
  28. System.out.println("用户认证状态:" + subject.isAuthenticated());
  29. }

输出:

  1. [DEBUG] Opening resource from class path [shiro.ini]
  2. [DEBUG] Parsing [users]
  3. [DEBUG] Parsing [roles]
  4. [DEBUG] Discovered the [roles] section. Processing...
  5. [DEBUG] Discovered the [users] section. Processing...
  6. 用户认证状态:false
  7. [DEBUG] Looked up AuthenticationInfo [zhangsan] from doGetAuthenticationInfo
  8. [DEBUG] AuthenticationInfo caching is disabled for info [zhangsan]. Submitted token: [org.apache.shiro.authc.UsernamePasswordToken - zhangsan, rememberMe=false].
  9. [DEBUG] Performing credentials equality check for tokenCredentials of type [[C and accountCredentials of type [java.lang.String]
  10. [DEBUG] Both credentials arguments can be easily converted to byte arrays. Performing array equals comparison
  11. [DEBUG] Authentication successful for token [org.apache.shiro.authc.UsernamePasswordToken - zhangsan, rememberMe=false]. Returned account [zhangsan]
  12. [DEBUG] No sessionValidationScheduler set. Attempting to create default instance.
  13. [INFO] Enabling session validation scheduler...
  14. [DEBUG] Creating new EIS record for new session instance [org.apache.shiro.session.mgt.SimpleSession,id=null]
  15. 用户认证状态:true
  16. 是否拥有admin角色: true
  17. 是否拥有public角色: false
  18. product:view: true
  19. product:view: false
  20. [DEBUG] Logging out subject with primary principal zhangsan
  21. [DEBUG] Stopping session with id [35cdf553-7b6b-4537-bb5a-1d502d42c17a]
  22. 用户认证状态:false

发表评论

表情:
评论列表 (有 0 条评论,575人围观)

还没有评论,来说两句吧...

相关阅读

    相关 shiro 简单登录demo

    1.shiro 是java强大的安全认证框架 1. shiro框架的核心功能:认证,授权,会话管理,加密 2. shiro框架认证流程 ![201901071131