shiro篇】 一. shiro简介及入门案例(idea+java项目)

shiro简介及入门案例

Apache Shiro 是 Java 的一个安全(权限)框架。 Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在 JavaSE 环境,也可以用在 JavaEE 环境。使用Shiro的人越来越多,因为它相当简单,对比Spring Security,可能没有Spring Security做的功能强大,但是在实际工作时可能并不需要那么复杂的东西,所以使用小而简单的Shiro就足够了。
Shiro 可以完成:认证、授权、加密、会话管理、与Web 集成、缓存 等。

shiro能解决什么问题?

  1. 认证:验证用户的身份
  2. 授权:对用户执行访问控制:判断用户是否被允许做某事
  3. 会话管理:在任何环境下使用 Session API,即使没有 Web 或EJB 容器。
  4. 加密:以更简洁易用的方式使用加密功能,保护或隐藏数据防止被偷窥
  5. Realms:聚集一个或多个用户安全数据的数据源

Shiro 的四大核心部分

  1. Authentication(身份验证):简称为“登录”,即证明用户是谁。
  2. Authorization(授权):访问控制的过程,即决定是否有权限去访问受保护的资源。
  3. Session Management(会话管理):管理用户特定的会话,即使在非 Web 或 EJB 应用程序。
  4. Cryptography(加密):通过使用加密算法保持数据安全

shiro的三个核心组件:

  1. Subject :正与系统进行交互的人,或某一个第三方服务。所有 Subject 实例都被绑定到(且这是必须的)一个SecurityManager 上。
  2. SecurityManager:Shiro 架构的心脏,用来协调内部各安全组件,管理内部组件实例,并通过它来提供安全管理的各种服务。当 Shiro 与一个 Subject 进行交互时,实质上是幕后的 SecurityManager 处理所有繁重的 Subject 安全操作。
  3. Realms :本质上是一个特定安全的 DAO。当配置 Shiro 时,必须指定至少一个 Realm 用来进行身份验证和/或授权。Shiro 提供了多种可用的 Realms 来获取安全相关的数据。如关系数据库(JDBC),INI 及属性文件等。可以定义自己 Realm 实现来代表自定义的数据源
    在这里插入图片描述

案例

项目准备
  1. 使用idea创建一个Java项目 day64-shiro-01-hello

  2. 创建lib目录加入jar包 jar包下载地址
    在这里插入图片描述

  3. 将jar导入项目中
    在这里插入图片描述

  4. 添加快速开发的类和配置文件 源码 shiro-root-1.3.2-source-release.zip
    在这里插入图片描述
    在这里插入图片描述

  5. 环境准备完成。。。。。

测试

1 修改配置文件(全部清空换这个也行)
# 用户
[users]
# 用户名 = 密码,角色1,角色2
admin = 123456, admin

# 角色
[roles]
# 角色名 = 权限   * :所有
admin = *
2 修改Quickstart的main方法里面的代码(去掉英文注释,添加中文注释),
	// 1. 创建一个SecurityManagerFactory
	Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
	// 2. 通过SecurityManagerFactory获取一个SecurityManager实例
	SecurityManager securityManager = factory.getInstance();
	// 3. 把securityManager设置到SecurityUtils, 方便后期获取(全局)
	SecurityUtils.setSecurityManager(securityManager);
	// 4. 创建一个Subject (可以当成当前登录的用户)
	Subject currentUser = SecurityUtils.getSubject();
	// 5. 给Subject创建一个session
	Session session = currentUser.getSession();
	session.setAttribute("someKey", "aValue");
	String value = (String) session.getAttribute("someKey");
	if (value.equals("aValue")) {
	    log.info("从session中获取到的value [" + value + "]");
	}
	
	// *6. 判断是否登录,没有登陆返回false
	if (!currentUser.isAuthenticated()) {
	    // 如果没有登录就进行登录
	    // 6.1 封装用户名和密码
	    UsernamePasswordToken token = new UsernamePasswordToken("lonestarr", "vespa");
	    // 6.2 设置记住我,暂时不用,先注销
	    // token.setRememberMe(true);
	    try {
	        // 6.3 登录
	        currentUser.login(token);
	    } catch (UnknownAccountException uae) { // 6.3.1 未知的账号异常
	        log.info("未知的账号异常" + token.getPrincipal());
	    } catch (IncorrectCredentialsException ice) {   // 6.3.2 用户名或密码错误
	        log.info("用户名或密码错误 " + token.getPrincipal() + " was incorrect!");
	    } catch (LockedAccountException lae) {  // 6.3.3 账户被锁定
	        log.info("账户被锁定" + token.getPrincipal());
	    } catch (AuthenticationException ae) { // 6.3.4 其他的认证异常
	        // AuthenticationException是上面三个异常的父类
	    }
	}
	
	// 7. 获取登录的用户名
	log.info("欢迎 [" + currentUser.getPrincipal() + "] 登录成功.");
	
	// 8. 判断该用户是否有某个角色
	if (currentUser.hasRole("schwartz")) {
	    log.info("该用户有【schwartz】这个角色!");
	} else {
	    log.info("该用户没有【schwartz】这个角色!");
	}
	
	// 9. 判断用户是否有这个权限
	if (currentUser.isPermitted("lightsaber:weild")) {
	    log.info("该用户有【lightsaber:weild】这个角色.");
	} else {
	    log.info("该用户没有【lightsaber:weild】这个角色.");
	}
	
	//a (very powerful) Instance Level permission:
	if (currentUser.isPermitted("winnebago:drive:eagle5")) {
	    log.info("You are permitted to 'drive' the winnebago with license plate (id) 'eagle5'.  " +
	            "Here are the keys - have fun!");
	} else {
	    log.info("Sorry, you aren't allowed to drive the 'eagle5' winnebago!");
	}
	
	// 10. 注销
	currentUser.logout();
	// 11. 系统退出
	System.exit(0);
3. 运行
  1. 由上面6.1得知 用户名和密码为"lonestarr", “vespa”,而我们配置文件里面只配了admin = 123456
  2. 再由8得知 角色为schwartz,而配置文件只配了admin角色
  3. 再再由9得知 权限为lightsaber:weild,虽然配置文件配* 代表所有权限,但是连角色都没匹配到何来的权限。所以运行结果基本能猜出来了。
    在这里插入图片描述
4. 其他运行结果可以通过修改shiro.ini的配置信息来实现。

总结

1 shiro是什么

  1. 一个权限框架
  2. 类似的框架有Spring Security

2 shiro中的核心组件

  1. subject : 和shiro交互的主题是都subject
  2. SecurityManager : shiro的核心组件
  3. realm : 安全数据源

3 shiro能干什么

  1. 认证*
  2. 授权*
  3. 加密
  4. 会话
  5. 缓存
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值