Apache Shiro Reference Documentation
Introduction to Apache Shiro
What is Apache Shiro?
Apache Shiro是一个强大而灵活的开源安全框架,它干净利落地处理身份认证,授权,企业会话管理和加密。
Apache Shiro的首要目标是易于使用和理解。安全有时候是很复杂的,甚至是痛苦的,但它没有必要这样。框架应该尽可能掩盖复杂的地方,露出一个干净而直观的API,来简化开发人员在使他们的应用程序安全上的努力。
以下是你可以用Apache Shiro所做的事情:
∙验证用户来核实他们的身份
∙对用户执行访问控制,如:
∙判断用户是否被分配了一个确定的安全角
∙判断用户是否被允许做某事
∙在任何环境下使用Session API,即使没有Web或EJB容器。
∙在身份验证,访问控制期间或在会话的生命周期,对事件作出反应。
∙聚集一个或多个用户安全数据的数据源,并作为一个单一的复合用户“视图”。
∙启用单点登录(SSO)功能。
∙为没有关联到登录的用户启用"Remember Me"服务
…
以及更多——全部集成到紧密结合的易于使用的API中。
Shiro视图在所有应用程序环境下实现这些目标——从最简单的命令行应用程序到最大的企业应用,不强制依赖其他第三方框架,容器,或应用服务器。当然,该项目的目标是尽可能地融入到这些环境,但它能够在任何环境下立即可用。
Apache Shiro Features
Apache Shiro是一个拥有许多功能的综合性的程序安全框架。下面的图表展示了Shiro的重点,并且这个参考手册也会与之类似的被组织起来:
Shiro把Shiro开发团队称为“应用程序的四大基石”——身份验证,授权,会话管理和加密作为其目标。
∙Authentication:有时也简称为“登录”,这是一个证明用户是他们所说的他们是谁的行为。
∙Authorization:访问控制的过程,也就是绝对“谁”去访问“什么”。
∙Session Management:管理用户特定的会话,即使在非Web或EJB应用程序。
∙Cryptography:通过使用加密算法保持数据安全同时易于使用。
java源代码加密也提供了额外的功能来支持和加强在不同环境下所关注的方面,尤其是以下这些:
∙Web Support:Shiro的web支持的API能够轻松地帮助保护Web应用程序。
∙Caching:缓存是Apache Shiro中的第一层公民,来确保安全操作快速而又高效。
∙Concurrency:Apache Shiro利用它的并发特性来支持多线程应用程序。
∙Testing:测试支持的存在来帮助你编写单元测试和集成测试,并确保你的能够如预期的一样安全。
∙"Run As":一个允许用户假设为另一个用户身份(如果允许)的功能,有时候在管理脚本很有用。∙"Remember Me":在会话中记住用户的身份,所以他们只需要在强制时候登录。
Apache Shiro Tutorial
Your First Apache Shiro Application
如果你从未使用过Apache Shiro,这个简短的教程将会向您展示如何建立一个由Apache Shiro担保的初始的及非常简单的应用程序。一路上我们将讨论Shiro的核心概念来帮助你熟悉Shiro的设计和API。
当你遵循本教程时,如果你确实不想编辑文件,你可以得到一个几乎相同的实例应用程序并按照你的
意愿引用它。选择一个位置:
∙在Apache Shiro的版本控制库:/repos/asf/shiro/trunk/samples/quickstart
∙在Apache Shiro的源代码的samples/quickstart目录。该源代码在Download页面提供下载。
Setup
在这个简单的示例中,我们将创建一个非常简单的命令行应用程序,它将会运行并迅速退出,这样你能够获得对Shiro 的API的感受。
该教程需要Java 1.5及更高本。我们也使用Apache Maven作为我们的构建工具,但当然这不是使用Apache Shiro所必需的。你可以获取Shiro的jar包并按你喜欢的方式合并到你的应用程序,例如可能是一Apache Ant和Ivy。
对于本教程,请确保你正在使用Maven 2.2.1或更高版本。你应该能够键入mvn -version命令行提示符,
并看到与下面类似的东西:
现在,在你的文件系统上创建一个新的目录,例如,shiro-tutorial并在该目录下保存下面的l文件:
The Tutorial class
我们将运行一个简单的命令行应用程序,因此,我们需要创建一个拥有public static void main(String[] args)方法的Java 类。
在包含你l文件的同样目录下,创建src/main/java子目录。在src/main/java目录下创建具有下面内容的
现在不必担心import语句——我们不久将会涉及到它们。但现在,我们得有一个命令行应用程序“外形”。该程序所能够做到全部事情是打印出文本"My First Apache Shiro Application"并退出。
Test Run
要试用我们的教程应用程序,请在你的教程项目的根目录下执行以下的命令提示符,并键入以下内容:
mvn compile exec:java
然后你将看到我们的little教程“程序”运行并退出。你应该会看到与下面相似的一些东西(注意粗体文本,它显示了我们的输出):
Run the Application
lhazlewood:~/projects/shiro-tutorial$ mvn compile exec:java
... a bunch of Maven output ...
1 [Tutorial.main()] INFO Tutorial - My First Apache Shiro Application
lhazlewood:~/projects/shiro-tutorial\$
我们已经验证了该程序运行成功——现在让我们启用Apache Shiro。当我们继续本教程的时候,你可以在每次我们添加一些代码后运行mvn compile exec:java来观察我们变化后的结果。
Enable Shiro
在应用程序中启用Shiro最先要明白的事情是几乎在Shiro中的每个东西都与一个名为SecurityManager的主要的/核心的组件有关。对于那些熟悉Java安全的人来说,这是Shiro的SecurityManager概念——它不等同于
java.lang.SecurityManager。
虽然我们将在Architecture章节详细的涉及到Shiro的设计,但现在了解Shiro的SecurityManager是应用程序的Shiro 环境的核心及每个应用程序中必须存在一个SecurityManager是很有益处的。因此,在我们的教程应用程序中第一件要做的事情就是配置SecurityManager实例。
Configuration
虽然我们能够直接实例化一个SecurityManager类,但Shiro的SecurityManager实现有足够的配置选项
及内置组件使得在Java源代码做这件事情变得较为痛苦——如果使用一个灵活的基于文本的配置格式来配置SecurityManager,那么这将是一件很容易的事情。
为此,Shiro通过基于文本的INI配置文件提供了一个默认的"共性(common denominator)"解决方案。近来人们已经相当厌倦了使用笨重的XML文件,且INI文件易于阅读,使用简单,依赖性低。你稍后将会看到有了对象导航图的简单理解,INI文件能够有效地被用来配置简单的对象图,如SecurityManager。
shiro.ini
因此,我们将为这个简单的应用程序使用INI文件来配置Shiro SecurityManager。首先,在l所在的同一目录下创建src/main/resources目录。然后在新目录下创建包含以下内容的shiro.ini文件:
如你所见,这个配置基本上建立了一小组静态用户帐户,对于我们的第一个应用程序已经足够了。在后面的章节中,你将看到我们如何使用更复杂的用户数据源,如关系数据库,LDAP的AcitveDirectory,以及更多。
Referencing the Configuration
现在我们已经定义好了一个INI文件,我们可以在我们的教程应用程序类中创建SecurityManager实例
了。改变main 方法来反映以下的更新内容:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论