没有合适的资源?快使用搜索试试~ 我知道了~
首页Apache Shiro:一站式开源安全框架详解
Apache Shiro:一站式开源安全框架详解
需积分: 42 4 下载量 81 浏览量
更新于2024-07-17
收藏 1.54MB PDF 举报
Apache Shiro参考手册中文版是一份详尽的文档,介绍了Apache Shiro,一个强大的开源安全框架,专注于简化身份认证、授权、企业会话管理和加密等安全任务。Shiro的设计理念是易用性和直观性,旨在帮助开发者轻松构建安全的应用程序,无论是在Web、EJB还是无容器环境中。 Shiro的核心功能包括: 1. 身份验证:通过验证用户的凭证(如用户名和密码)来确认用户身份,确保只有合法用户才能访问系统。 2. 访问控制:基于角色基础或策略,判断用户是否具备执行特定操作的权限,如查看、编辑或删除数据。 3. 会话管理:提供跨请求或跨会话的状态保持,支持离线状态的“RememberMe”功能,以及对会话生命周期的事件处理。 4. 事件响应:在身份验证、授权和会话管理过程中,对各种事件做出反应,例如用户登录成功、权限变更等。 5. 多数据源支持:可以聚合来自不同来源的用户安全数据,形成统一的用户视图。 6. 单点登录(SSO):允许用户在一个系统中进行一次身份验证后,无需再次登录即可访问其他受保护的资源。 7. 兼容性广泛:Shiro设计为无依赖于特定框架、容器或应用服务器,适用于各类应用场景,从简单的命令行应用到大型企业级系统。 Apache Shiro的特点体现在其全面的功能和跨环境的适用性,作为“应用程序的四大基石”之一,它将身份验证、授权、会话管理和加密整合到一个简洁易用的API中。这份文档不仅提供了详细的技术指导,还展示了Shiro如何在各种项目架构中无缝融入,提升开发效率并保障应用安全。无论开发者处于何种开发阶段或项目规模,都能从中找到有价值的信息。
资源详情
资源推荐
![](https://csdnimg.cn/release/download_crawler_static/11528127/bgf.jpg)
Easy Configuration
由于 JavaBeans 的兼容性,通过任何支持 JavaBean 风格的配置的机制可以很容
易的用自定义组件配置 SecurityManager,如 Spring,Guice,JBoss,等等。
Many Configuration Options
Shiro 的SecurityManager 实现及所支持的组件都是兼容JavaBean 的。这使得Shiro 几乎能使用任何配置格式,如regular
Java,XML(Spring, JBoss, Guice,等等),YAML,JSON,Groovy Builder markup,以及更多的配置。
Authentication
Authorization
Session Management
Cache Management
Realm coordination
Event propagation
"Remember Me" Services
Subject creation
Logout
以及更多。
但这是许多功能来尝试管理一个单一的组件。而且,使这些东西灵活而又可定制将会是非常困难的,如果一切都集中
到一个单一的实现类。
为了简化配置并启用灵活配置/可插性,Shiro 的实现都是高度模块化设计
——
由于如此的模块化,SecurityManager
实现(以及它的类层次结构)并没有做很多事情。相反,SecurityManager 实现主要是作为一个轻量级的
“
容器
”
组
件,委托计划所有的行为到嵌套
/
包裹的组件。这
种“
包装”的设计体现在上面的详细构架图。
虽然组件实际上执行逻辑,但 SecurityManager 实现知道何时以及如何协调组件来完成正确的行为。
SecurityManager 实现和组件都是兼容 JavaBean 的,它允许你(或某个配置机制)通过标准的 JavaBean 的
accessor/mutator 方法(get*/set*)轻松地自定义可拔插组件。这意味着 Shiro 的架构的组件性能够把自定义行为转
化为非常容易的配置文件。
我们接下来将讨论 Configuration。
Lend a hand with documentation
我们希望本文档可以帮助你及你用 Apache Shiro 所做的工作,我们的团体在不断改善和扩展该文档。如果你想帮助
Shiro 项目,请考虑修改,扩展,或者添加文档到你认为需要的地方。您的每一点帮助都壮大了我们的团体,从而改
进了 Shiro。
贡献您的文档最简单的方法是将其发送到用户论坛或者用户的通讯录。
Apache Shiro
配置
Shiro 被设计成能够在任何环境下工作,从最简单的命令行应用程序到最大的的企业群集应用。由于环境的多样性,
使得许多配置机制适用于它的配置。本节仅讨论只被 Shiro 核心所支持的配置机制。
![](https://csdnimg.cn/release/download_crawler_static/11528127/bg10.jpg)
编程 Configuration
创建一个 SecurityManger 并把它提供给应用程序的绝对的最简单的方法是创建一个
org.apache.shiro.mgt.DefaultSecurityManager 并把它链到代码中。例如:
令人惊讶的是,仅在 3 行代码后,你马上就拥有了一个适合许多应用环境的功能全面的 Shiro 环境。这是多么的容
易!?
SecurityManager 对象图
正如在
A
r
c
hi
t
e
c
t
ur
e
章节中讨论的一样,
S
hi
r
o
的
S
e
c
ur
i
t
yM
an
ag
er
实现实质上是一个特定安全的嵌套组件中的模块化对
象图。因为它们也是兼容 JavaBean 的,你可以调用任何嵌套组件的 getter 和setter 方法来配置 SecurityManager 以
及它的内部对象图。
例如,如果你想配置 SecurityManager 实例来使用自定义的 SessionDAO 来定制 Session Management,你可以通过嵌
套的 SessionManager 的 setSessionDAO 方法直接设置 SessionDAO:
通过使用直接方法调用,你可以配置 SecurityManager 的对象图的任何部分。
但是,程式化定制过于简单,它并不能代表大多数现实世界的应用程序的理想配置。以下是程式化定制可能不适合你
的几点原因:
它需要你了解和实例化一个直接实现。这将会更好,如果你不需要了解具体的实现和在哪里可以找到它们。
由于
Java
的类型安全性,你需要转换通过
get*
方法获取的对象来得到它们具体的实现。如此多的转换是丑陋
的,冗长的,并使你和实现类紧密连接起来。
SecurityUtils.setSecurityManager
方法调用在一个
VM
静态单例中实例化
SecurityManager
实例,
VM
静态单例
在给许多应用程序带来好处的同时,也会引发一些问题,如果多个启用 Shiro 的应用程序在同一个 JVM 中运
行。如果该实例是一个应用程序单例,而不是一个静态内存引用就再好不过了。
每当你想改变
Shiro
配置时,它需要你重新编译你的应用程序。
然而,即使有这么多警告,直接的编程操作方法在内存受限的环境中仍然是有价值的,如智能手机应用。若你的应用
程序不在一个内存受限的环境下运行,你会发现基于文本的配置要更容易使用和阅读。
INI Configuration
大多数应用程序反而从基于文本的配置受益,能够独立地修改源代码,甚至让那些不熟悉 Shiro 的API 的人能够更
容易理解。
![](https://csdnimg.cn/release/download_crawler_static/11528127/bg11.jpg)
为了确保一个基于文本的通用标准配置机制能够在所有环境下以最小的第三方依赖工作,Shiro 支持 INI 格式来构建
SecurityManager 对象图及其支持的组件。INI 易于阅读,易于配置,且设置简单,适合大多数应用程序。
Creating a SecurityManager from INI
以下是两个关于如何基于 INI 配置构建 SecurityManager 的例子。
SecurityManager from an INI resource
我们能够从一个 INI 资源路径创建 SecurityManager 实例。我们可以从文件系统,classpath,或分别拥有前缀 file:,
c
la
ss
pa
t
h:
,或
url:
的
U
RL
中获取资源。本例采用
F
ac
t
o
r
y
提取
c
la
ss
pa
t
h
根目录下的
s
hi
r
o.ini
文件并返回
S
e
c
ur
it
y
M
an
ag
er
实
例:
SecurityManager from an INI instance
如果你需要,INI 配置也可以通过 org.apache.shiro.config.Ini 类使用编程方式创建。Ini 类的功能与 JDK
java.util.Properties 类相似,但通过 section 名称,它同时还支持分割。
例如:
现在,我们知道如何从 INI 配置构建出一个 SecurityManager 了,我们看看到底是如何定义一个 Shiro INI 配置的。
INI Sections
INI 基本上是一个文本配置,包含了由唯一命名的 section 组织的键
/
值对。键只是每个 section 唯一,而不是在整个
配置中(与 JDK 属性不同)。不过每个 section 都可以被看作单一的属性定义。
注释行能够以散列字符(# - 也就是"hash","pound"或"number"符号)或分号(";")开始。
以下是 Shiro 能够理解的 section 例子:
![](https://csdnimg.cn/release/download_crawler_static/11528127/bg12.jpg)
[main]
[main] section 是你配置应用程序的 SecurityManager 实例及任何它的依赖组件(如 Realms)的地方。
配置对象实例,如 SecurityManager 或任何它的依赖组件,通过使用 INI 听起来是一件困难的事情,我们仅能使用名
称
/
值对。但通过一点点约定和对对象图的理解,你将会发现你可以做很多事情。Shiro 使用这些条件来简单却相当简
洁的配置机制。
我们往往喜欢把这种方法称为“穷人的
”
依赖注入,虽然没有完全成熟的 Spring/Guice/JBoss XML 文件强大,但你将
会发现它能够完成许多事情却没有太多的复杂性。当然那些其他的配置机制也同样可用,但它们不是使用 Shiro 所必
需的。
为了激起你的欲望,这里有一个有效的[main]配置的例子。我们将在下面讨论它的细节,但你可能会发现,仅凭直觉
就能明白很多事情是怎么回事:
定义一个对象
请思考下面[main] section 的摘要:
![](https://csdnimg.cn/release/download_crawler_static/11528127/bg13.jpg)
这一行实例化了 com.company.shiro.realm.MyRealm 类型的新的对象实例,并使该对象使用 myRealm 名称,以供进
一步的引用和配置。
如果该实例化的对象实现了 org.apache.shiro.util.Nameable 接口,则 Nameable.setName 方法将会在拥有该名字(在
本例中是 myRealm)的对象上调用。
设置对象属性
Primitive Values
简单的原始属性,可以通过使用等号来指定:
配置中的这些行转化为方法调用:
这怎么可能呢? 它假定所有的对象都是兼容 Java Bean 的 POJO。
在后台,当设置这些属性时,Shiro 默认使用 Apache Commons BeanUtils 来完成所有繁重的任务。所以,尽管 INI 值
是文本的,BeanUtils 知道如何去转换字符串值到正确的原始类型,然后调用相应的 JavaBean 的 setter 方法。
Reference Values
如果你需要设置的值不是一个原始的,而是另一个对象呢?那么,你可以使用美元符号($)来引用之前定义的实
例。例如:
这简单地定位通过名称 sha256Matcher 来定位定义好的对象,然后使用 BeanUtils 在myRealm 实例上设置该对象(通
过调用 myRealm.setCredentialsMatcher(sha256Matcher)方法)。
Nested Properties
在 INI 配置行的等号左侧使用点号,你可以遍历对象图来得到想设置的最终的对象
/
属性。例如,这个配置行:
(通过 BeanUtils)转译成下面的逻辑:
剩余91页未读,继续阅读
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/ec76556f608c4dc6b287916247ccf621_qq_41086359.jpg!1)
鞠崽23333
- 粉丝: 4067
- 资源: 109
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- 新型矿用本安直流稳压电源设计:双重保护电路
- 煤矿掘进工作面安全因素研究:结构方程模型
- 利用同位素位移探测原子内部新型力
- 钻锚机钻臂动力学仿真分析与优化
- 钻孔成像技术在巷道松动圈检测与支护设计中的应用
- 极化与非极化ep碰撞中J/ψ的Sivers与cos2φ效应:理论分析与COMPASS验证
- 新疆矿区1200m深孔钻探关键技术与实践
- 建筑行业事故预防:综合动态事故致因理论的应用
- 北斗卫星监测系统在电网塔形实时监控中的应用
- 煤层气羽状水平井数值模拟:交替隐式算法的应用
- 开放字符串T对偶与双空间坐标变换
- 煤矿瓦斯抽采半径测定新方法——瓦斯储量法
- 大倾角大采高工作面设备稳定与安全控制关键技术
- 超标违规背景下的热波动影响分析
- 中国煤矿选煤设计进展与挑战:历史、现状与未来发展
- 反演技术与RBF神经网络在移动机器人控制中的应用
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)