没有合适的资源?快使用搜索试试~ 我知道了~
shiro相关jar
5星 · 超过95%的资源 需积分: 9 11 下载量 118 浏览量
2012-08-15
15:44:01
上传
评论
收藏 217KB DOC 举报
温馨提示
试读
19页
Shiro文档
资源详情
资源评论
资源推荐
Shiro 是 JAVA 世界中新近出现的权限框架,较之 JAAS 和 Spring
Security,Shiro 在保持强大功能的同时,还在简单性和灵活性方面拥有巨大
优势。本文就带领读者一睹 Shiro 的风采。
可能大家早先会见过 J-security,这个是 Shiro 的前身。在 2009 年 3 月初之
前,这个安全框架叫做 J-security,由于某些原因,更名为 Shiro(或者 Ki,
意为 Fortress),是 Apache 的孵化项目,鉴于本文编写时 Shiro 的还没有
正式发布的版本,本文使用的是 Jsecurity 的稳定版本 0.9,本文中 Shiro 等
同于 Jsecurity。
本文将涉及 Shiro 的整体框架、安全模型、关键概念类,同时给出了 Shiro 以
及 Grails Shiro Plugin 的使用示例,可以下载文中使用的源代码。
本文代码的开发环境:
Jsecurity 0.9
Grails 1.2.0
Grails Shiro Plugin 1.0.1
SpringSource Tool Suite 2.3
Shiro 是一个强大而灵活的开源安全框架,能够非常清晰的处理认证、授权、
管理会话以及密码加密。如下是它所具有的特点:
1. 易于理解的 Java Security API;
2. 简单的身份认证(登录),支持多种数据源
(LDAP,JDBC,Kerberos,ActiveDirectory 等);
3. 对角色的简单的签权(访问控制),支持细粒度的签权;
4. 支持一级缓存,以提升应用程序的性能;
5. 内置的基于 POJO 企业会话管理,适用于 Web 以及非 Web 的环境;
6. 异构客户端会话访问;
7. 非常简单的加密 API;
8. 不跟任何的框架或者容器捆绑,可以独立运行。
目前还有其他出现较早的安全框架,比如 JAAS,Spring Security。
JAAS —面世的时间最早,但是鉴于其在使用上有很大的限制,很少有人真正
的使用它。可以说它不是一个好的应用程序级别的安全框架;
Spring Security —目前是 Java 安全框架领域当之无愧的老大,已经非常成
熟了;如果使用 Spring 框架,可以首选 Spring Security,但是对于单应用
来说,Shiro 更显简单方便。
下面就开始我们的 Shiro 之旅吧!
首先,我们来看看的 Shiro 的整体架构,见下图:
身份份验证通过后,由这个组件对登录人员进行访问控制的筛查,比如
“who can do what”, 或者“who can do which actions”。Shiro 采
用“基于 Realm”的方法,即用户(又称 Subject)、用户组、角色和
permission 的聚合体。
4. Session Manager
这个组件保证了异构客户端的访问,配置简单。它是基于 POJO/J2SE
的,不跟任何的客户端或者协议绑定。
Shiro 的认证和签权可以通过 JDBC、LDAP 或者 Active Directory 来访问数
据库、目录服务器或者 Active Directory 中的人员以及认证 / 签权信息。
SessionManager 通过会话 DAO 可以将会话保存在 cache 中,或者固化到
数据库或文件系统中。
从 Shiro 的框架图,已经能够体会到这个工具的简单了。下面让我们来看看
Shiro 是如何工作的。先了解一下它的安全模型吧!见下图:
图 2. 安全模型
上图中,涉及了 Shiro 的五个概念:
Subject 是安全领域术语,除了代表人,它还可以是应用。在单应用中,
可将其视为 User 的同义词。
Principal 是 Subject 的标识,一般情况下是唯一标识,比如用户名。
Role 和 Permission 分别代表了不同粒度的权限,从上图中可以看出
Role 的粒度更大些,Permission 代表了系统的原子权限,比如数据的
修改、删除权限。对于简单的权限应用,可以不需要 Permission。
Realm 是一个执行者,负责真正的认证和鉴权。
实现应用的安全模块的关键在于:定义合适的 role 和 permission,这就需要
遵循如下原则:
1. role 没有实质内容,只是代表一组 permission,目的是为了管理的方
便,一般都是动态定义;
2. permission 一般都是预先定义好的,不允许动态改变,除非源代码改
动,它才会变化,它是整个安全模块的基础;
3. 要使 permission 也能动态定义,并非不可能,但是这将使鉴权非常复
杂,甚至可能导致鉴权语句遍布整个程序,得不偿失;
4. 当然有一个例外:如果知道 permission 动态定义的规则和鉴权规则,
如 Grails 的 ;leter 中“${controllerName}:${actionName}:$
{params.id}”也可实现 permission 的动态定义
理解 Shiro 的架构和安全模型了,我们来看看更具体些的内容。下图显示了
Shiro 中的关键概念类(参考资料 -- JSecurity Mini Guide)。
图 3. 关键类
AuthenticationToken 和 AuthenticationInfo
前者在认证前使用,描述认证所需的信息,最常用的就是 username 和
password 对;后者在认证后使用,内容同前,但是表示已经经过认证的信息。
RememberMe
剩余18页未读,继续阅读
qqq756514656
- 粉丝: 0
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论1