Shiro介绍

一、Shiro介绍
Shiro是一个Java安全框架,执行身份验证、授权、密码、会话管理。Shiro是Apache 的一个开源项目,前身是JSecurity 项目,始于2003年初。Shiro 可以为任何应用提供安全保障 - 从命令行应用、移动应用到大型网络及企业应用。shiro 解决了应用安全的四要素: 认证 - 用户身份识别,常被称为用户“登录”; 授权 - 访问控制; 密码加密 - 保护或隐藏数据防止被偷窥; 会话管理 - 每用户相关的时间敏感的状态。同时,Shiro另外支持了一些辅助特性:如 Web 应用安全、单元测试和多线程,它们的存在强化了上面提到的四个要素。二、Shiro的优势从 2003 年至今,框架选择方面的情况已经改变了不少,但今天仍有令人信服的理由让你选择 Shiro。其实理由相当多,Apache Shiro:1、易于使用 - 易用性是这个项目的最终目标。应用安全有可能会非常让人糊涂,令人沮丧,并被认为是“必要之恶”【译注:比喻应用安全方面的编程。】。若是能让它简化到新手都能很快上手,那它将不再是一种痛苦了。2、广泛性 - 没有其他安全框架可以达到 Apache Shiro 宣称的广度,它可以为你的安全需求提供“一站式”服务。3、灵活性 - Apache Shiro 可以工作在任何应用环境中。虽然它工作在 Web、EJB 和 IoC 环境中,但它并不依赖这些环境。Shiro 既不强加任何规范,也无需过多依赖。4、Web 能力 - Apache Shiro 对 Web 应用的支持很神奇,允许你基于应用 URL 和 Web 协议(如 REST)创建灵活的安全策略,同时还提供了一套控制页面输出的 JSP 标签库。5、可插拔 - Shiro 干净的 API 和设计模式使它可以方便地与许多的其他框架和应用进行集成。你将看到 Shiro 可以与诸如 Spring、Grails、Wicket、Tapestry、Mule、Apache Camel、Vaadin 这类第三方框架无缝集成。6、支持 - Apache Shiro 是 Apache 软件基金会成员,这是一个公认为了社区利益最大化而行动的组织。项目开发和用户组都有随时愿意提供帮助的友善成员。三、核心概念Shiro的核心概念有三个:Subject,SecurityManager 和 Realms。3.1 Subjectsubject 被Shiro 描述为一个主体,对于web应用来说,可以简单理解为用户。这里我们来阐述一个Shiro设计的重要理念,即以主体为展开的安全体系构建。引用一段话: 在考虑应用安全时,你最常问的问题可能是“当前用户是谁?”或“当前用户允许做 X 吗?”。当我们写代码或设计用户界面时,问自己这些问题很平常:应用通常都是基于用户故事构建的,并且你希望功能描述(和安全)是基于每个用户的。所以,对于我们而言,考虑应用安全的最自然方式就是基于当前用户。Shiro 的 API 用它的 Subject 概念从根本上体现了这种思考方式。在应用程序中,我们可以在任何地方获取当前操作的用户主体: import org.apache.shiro.subject.Subject; import org.apache.shiro.SecurityUtils; … Subject currentUser = SecurityUtils.getSubject();获得Subject 后,通过这个对象,我们可以对其进行绝大多数安全操作:登录、登出、访问会话、执行授权检查等。Shiro 的api非常直观,它反映了开发者以“每个用户” 思考安全控制的自然趋势。3.2 SecurityManagerSubject 的幕后推手是 SecurityManager,Subject 代表了当前用户的安全操作,SecurityManager则管理所有用户的安全操作。 SecurityManager 是 Shiro 框架的核心,充当“保护伞”,引用了多个内部嵌套安全组件,它们形成了对象图。但是,一旦 SecurityManager 及其内部对象图配置好,它就会退居幕后,应用开发人员几乎把他们的所有时间都花在 Subject API 调用上。一个应用只需要一个 SecurityManager,是一个单例对象。它的缺省实现是POJO,Shiro 里的其他组件也是一样。因此,可以用POJO兼容的任何配置机制进行配置:普通的Java代码、Spring xml、YAML、和 ini 文件等。基本上,能够实例化类和调用JavaBean兼容方法的任何配置形式都可以。比如,通过ini文件进行配置: [main] cm = org.apache.shiro.authc.credential.HashedCredentialsMatcher cm.hashAlgorithm = SHA-512 cm.hashIterations = 1024 # Base64 encoding (less text): cm.storedCredentialsHexEncoded = false iniRealm.credentialsMatcher = $cm[main] 段落是配置SecurityManager 对象及其使用的其他任何对象(如 Realm) 的地方,在上面的示例中,我们看到了两个对象:1、cm对象,是Shiro 的HashedCredentialsMatcher 类实例,cm 的各属性通过“嵌套点”语法进行配置。2、iniRealm对象,被 SecurityManager 用来表示以INI 格式定义的用户账户。然后,我们在Java代码中,可以轻而易举的获得 SecurityManager对象了: //1. 装入 INI 配置 Factory factory = new IniSecurityManagerFactory(“classpath:shiro.ini”); //2. 创建 SecurityManager SecurityManager securityManager = factory.getInstance(); //3. 使其可访问 SecurityUtils.setSecurityManager(securityManager);3.3 RealmRealm 充当了 Shiro 与应用安全数据间的“桥梁”或者“连接器”。当切实与像用户帐户这类安全相关数据进行交互,执行认证(登录)和授权(访问控制)时,Shiro 会从应用配置的 Realm 中查找很多内容。从某种意义上讲,Realm 实际上就是一个安全相关的 DAO:它封装了数据源的连接细节,并在需要时将相关数据提供给 Shiro。注意:在配置Shiro 时,必须指定至少一个 Realm ,可以配置多个。Shiro 内置了一些Realm ,支持多种数据源的连接,如JDBC、LDAP、INI文件的连接等。另外,可以自定义Realm 实现,方便个性化的应用场景。四、典型的安全场景概述应用安全的四要素:认证、授权、会话管理、加密。4.1 认证虽然有些武断,但是一般web 应用认证就是登录功能。也就是说,当用户使用应用进行认证时,他们就在证明他们就是自己所说的那个人。这是一个典型的三步过程: 1、收集用户身份信息,成为当事人(principal),以及身份的支持证明,称为证书(Credential)。 2、将当事人和证书提交给系统。 3、如果提交的证书与系统期望的该用户身份(当事人)匹配,该用户就被认为是经过认证的,反之则被认为未经认证的。Shiro 以简单直观的方式支持同样的流程。Shiro 有一套以Subject 为中心的API,几乎你想要用 Shiro 在运行时完成的所有事情都能通过与当前执行的 Subject 进行交互而达成。因此,要登录 Subject,只需要简单地调用它的 login 方法。传入表示被提交当事人和证书(在这种情

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

下,就是用户名和密码)的 AuthenticationToken 实例。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值