简单使用shiro

桃扇骨 2022-02-05 08:17 264阅读 0赞

简单使用shiro

  • maven依赖
  • 配置文件shiro.ini
  • 例子

maven依赖

  1. <dependency>
  2. <groupId>org.apache.shiro</groupId>
  3. <artifactId>shiro-core</artifactId>
  4. <version>1.4.1</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.slf4j</groupId>
  8. <artifactId>slf4j-log4j12</artifactId>
  9. <version>1.7.21</version>
  10. </dependency>
  11. <dependency>
  12. <groupId>log4j</groupId>
  13. <artifactId>log4j</artifactId>
  14. <version>1.2.17</version>
  15. </dependency>
  16. <dependency>
  17. <groupId>commons-logging</groupId>
  18. <artifactId>commons-logging</artifactId>
  19. <version>1.2</version>
  20. </dependency>

配置文件shiro.ini

  1. [users]
  2. # user 'root' with password 'secret' and the 'admin' role
  3. root = secret, admin
  4. guest = guest, guest
  5. testUser01 = 123456, testRole02, testRole04
  6. testUser02 = 123456, testRole01, testRole02
  7. testUser03 = 12345, testRole03
  8. [roles]
  9. admin = *
  10. testRole01 = winnebago:drive:eagle5
  11. testRole02 = lightsaber:*
  • users:用户列表
    root 是用户账号,secret是密码,admin是角色
  • roles:角色列表
    给各个角色授权,* 星号表示授权所有权限

例子

  1. //读取配置文件
  2. Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
  3. SecurityManager securityManager = factory.getInstance();
  4. //shiro环境设置
  5. SecurityUtils.setSecurityManager(securityManager);
  6. //获取当前登录用户
  7. Subject currentUser = SecurityUtils.getSubject();
  8. //通过用户获取session
  9. Session session = currentUser.getSession();
  10. session.setAttribute("key01", "value01");
  11. String value = (String) session.getAttribute("key01");
  12. log.info("[key01," + value + "]");
  13. //判断用户是否已经认证(是否登录)
  14. if (!currentUser.isAuthenticated()) {
  15. UsernamePasswordToken token = new UsernamePasswordToken("testUser02", "123456");
  16. token.setRememberMe(true);
  17. try {
  18. currentUser.login(token);
  19. } catch (UnknownAccountException uae) {
  20. log.info("用户账号不存在: " + token.getPrincipal());
  21. } catch (IncorrectCredentialsException ice) {
  22. log.info("用户账号的密码出错: " + token.getPrincipal());
  23. } catch (LockedAccountException lae) {
  24. log.info("用户账号被锁了: " + token.getPrincipal());
  25. } catch (AuthenticationException ae) {
  26. log.info("认证出错: " + token.getPrincipal());
  27. }
  28. }
  29. log.info("账号认证成功 [" + currentUser.getPrincipal() + "]");
  30. //测试角色
  31. if (currentUser.hasRole("testRole02")) {
  32. log.info("当前用户拥有角色 testRole02");
  33. } else {
  34. log.info("对不起,当前用户没有角色 testRole02");
  35. }
  36. //测试权限
  37. if (currentUser.isPermitted("lightsaber:wield")) {
  38. log.info("当前用户拥有权限: lightsaber:wield");
  39. } else {
  40. log.info("对不起,当前用户拥有权限: lightsaber:wield");
  41. }
  42. //测试权限
  43. if (currentUser.isPermitted("winnebago:drive:eagle5")) {
  44. log.info("当前用户拥有权限: winnebago:drive:eagle5");
  45. } else {
  46. log.info("对不起,当前用户拥有权限: winnebago:drive:eagle5");
  47. }
  48. //登出
  49. currentUser.logout();
  50. System.exit(0);

打印信息

  1. 2019-05-05 12:02:47,671 INFO [Quickstart] - [key01,value01]
  2. 2019-05-05 12:02:47,672 INFO [Quickstart] - 账号认证成功 [testUser02]
  3. 2019-05-05 12:02:47,672 INFO [Quickstart] - 当前用户拥有角色 testRole02
  4. 2019-05-05 12:02:47,673 INFO [Quickstart] - 当前用户拥有权限: lightsaber:wield
  5. 2019-05-05 12:02:47,673 INFO [Quickstart] - 当前用户拥有权限: winnebago:drive:eagle5

发表评论

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

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

相关阅读

    相关 shiro 简单登录demo

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