Apache Shiro 10分钟入门教程

作者 : 开心源码 本文共4427个字,预计阅读时间需要12分钟 发布时间: 2022-05-11 共58人阅读

Apache Shiro 10分钟入门教程

——翻译 崔传新

1.简介

欢迎来到Apache Shiro的10分钟教程!

通过阅读这个快速简单的教程,您将充分理解开发人员如何在其应使用程序中用Shiro。 而且你应该能在10分钟内做到这一点。

2.概览

什么是Apache Shiro?

Apache Shiro是一个功可以强大且易于用的Java安全框架,为开发人员提供了一个直观而全面的处理方案,使用于身份验证、受权、加密和会话管理。

实际上,它实现了管理应使用程序安全性的所有方面,同时尽可可以避免出现问题。 它建立在完善的接口驱动设计和面向对象的准则之上,能在任何你想象得到的地方实现自己设置行为。 但是,对于所有事情来说,默认情况下都是正当的,这与应使用程序安全性是一样的。 至少这是我们所追求的。

Apache Shiro可以做什么?

很多 。 但我们不想扩张”快速入门”的内容。 假如您想理解它能为您做什么,请查看我们的功可以页面。 此外,假如您对我们如何开始以及为什么存在感到好奇,请参阅Shiro History and Mission页面。

ok,现在我们来做少量事情吧!

说明:Shiro能在任何环境下运行,从最简单的命令行应使用程序到最大的企业Web和集群应使用程序,但是我们将在这个快速入门(QuickStart)中用一个简单的”main”方法来完成一个最简单的例子,以便能取得对API的应使用体验。

3.下载

1)确保您安装了JDK1.6+和Maven 3.0.3+。

2)从下载页面下载最新的Shiro”源代码分发”包。 在这个例子中,我们用1.3.2发行版本。

3)解压源代码包

$ unzip shiro-root-1.3.2-source-release.zip

4)进入quickstart目录

$ cd shiro-root-1.3.2/samples/quickstart

5)运行QuickStart

$ mvn compile exec:java

这个目标只会打印出少量日志消息,让你知道发生了什么,而后退出——(主要Maven构建项目的过程,包括下载少量有关的组件,下载后,下次运行就不再次下载了)。 在阅读本快速入门指南时,请随时查看samples / quickstart / src / main / java / Quickstart.java下的代码。 根据需要随时更改该文件并运行上述mvn compile exec:java命令。

备注说明:

我这里在windows8平台下运行体验的,环境为JDK1.8+maven3.5;步骤同上。

为了知道运行结果,我在源代码推出前位置加了一行代码,以观测效果:

log.info(“\n====This is Quikstart Exampel.It is done!====”);//添加代码行

结果示用意:

Apache Shiro 10分钟入门教程

4.Quickstart.java

上面引使用的Quickstart.java文件包含了所有能帮助您熟习API的代码。 现在让我们把它分成大块,这样你即可以很容易地了解发生了什么。

几乎在所有环境中,您都能通过以下调使用获取当前正在执行的使用户:

Subject currentUser = SecurityUtils.getSubject();

用SecurityUtils.getSubject(),我们能取得当前正在执行的Subject。 主体只是应使用程序使用户的特定安全”视图”。 我们实际上想称它为'User(使用户)',由于这”有道理”,但我们决定不这么干:太多的应使用程序都有现有的API,它们已经拥有自己的User类/框架,我们不想与这些API冲突。 另外,在安全领域,术语Subject实际上是公认的命名法。 ok,继续…

独立应使用程序中的getSubject()调使用,可可以会根据特定于应使用程序的位置中的使用户数据以及服务器环境(例如Web应使用程序)返回相应Subject,并根据与当前线程或者传入请求关联的使用户数据而获取Subject 。

现在你有一个主题,你能使用它做什么?

假如您想在应使用程序的当前会话期间向使用户提供可使用的内容,则能取得他们的会话:

Session session = currentUser.getSession(); session.setAttribute( “someKey”, “aValue” );

Session是一个Shiro特定的实例,它给你提供了大多数习惯的常规HttpSession实例,但有少量额外的好处和一个很大的区别:它不需要HTTP环境!

假如在Web应使用程序内部署,默认情况下会话将基于HttpSession。 但是,在非Web环境中,就像这个简单的快速入门一样,Shiro默认会自动用它的企业会话管理。 这意味着无论部署环境如何,您都能在应使用程序中的任何层中用相同的API。 这将打开一个全新的应使用程序世界,由于任何需要会话的应使用程序都不需要强制用HttpSession或者EJB Stateful Session Beans。 而且,任何用户端技术现在都能共享会话数据。

所以现在你能取得一个Subject和他们的Session。 那些真正有使用的东西比方检查能否允许他们做事情,比方检查角色和权限?

那么,我们只可以对已知的使用户进行这些检查。 上面的Subject实例代表当前使用户,但谁是当前使用户? 其实,他们是匿名的 – 也就是说,直到他们登录至少一次。 所以,让我们这样做:

if ( !currentUser.isAuthenticated() ) {

//以gui特定方式收集使用户主体和凭证-principals and credentials

//如html表单的使用户名/密码,X509证书,OpenID等。

//我们将在这里用使用户名/密码示例,由于它是最常见的。

//(你知道这是什么电影吗?;)

UsernamePasswordToken token = new UsernamePasswordToken(“lonestarr”, “vespa”);

//this is all you have to do to support 'remember me' (no config – built in!):

//这就是你需要做的所有事情以便来支持'记住我'(没有配置 – 内置!)

token.setRememberMe(true);

currentUser.login(token);

}

Apache Shiro 10分钟入门教程

代码截图

就这样! 应使用起来不可可以更容易了。

但是,假如他们的登录尝试失败呢? 你能捕捉各种具体的例外情况,告诉你究竟发生了什么,并允许你相应地解决和做出反应:

try {

currentUser.login( token );

//假如没有例外,就是这样,搞定!

} catch ( UnknownAccountException uae ) {

//使用户名不在系统中,如何向他们显示错误消息?

} catch ( IncorrectCredentialsException ice ) {

//密码不匹配,能否再试?

} catch ( LockedAccountException lae ) {

//该使用户名的帐户被锁定 – 无法登录。如何显示一条消息?

}

… 更多类型的异常检查——假如你想要 …

} catch ( AuthenticationException ae ) {

//意外情况 – 怎样解决?

}

Apache Shiro 10分钟入门教程

代码截图

您能检查许多不同类型的例外情况,或者者抛出Shiro可可以无法解释的自己设置异常情况。 有关更多信息,请参阅AuthenticationException JavaDoc。

ok,到现在为止,我们有一个登录使用户。 我们还可以做什么?

让我们看看他们是谁:

//打印他们的标识主体(在这种情况下是使用户名)

log.info( “User [” + currentUser.getPrincipal() + “] logged in successfully.” );

我们也能测试它们能否具备特定的角色:

if ( currentUser.hasRole( “schwartz” ) ) {

log.info(“May the Schwartz be with you!” );

} else {

log.info( “Hello, mere mortal.” );

}

我们还能看到他们能否有权对某种类型的实体采取行动:

if ( currentUser.isPermitted( “lightsaber:weild” ) ) {

log.info(“You may use a lightsaber ring. Use it wisely.”);

} else {

log.info(“Sorry, lightsaber rings are for schwartz masters only.”);

}

另外,我们能执行非常强大的实例级权限检查 – 查看使用户能否有权访问特定类型实例的功可以:

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!”);

}

小菜一碟,对吧?

最后,当使用户完成用应使用程序时,他们能注销:

currentUser.logout(); //删除所有标识信息并使其会话无效。

那么,这就是在应使用程序开发人员级别用Apache Shiro的核心。 尽管有少量非常复杂的东西在引擎盖下进行,使得这项工作如此优雅,但这的确是它的一律。

但是你可可以会问自己,”但是谁负责在登录时获取使用户数据(使用户名和密码,角色和权限等),以及谁在运行时真正执行这些安全检查?”,这么问就对了——你来做:通过实施 Shiro称之为Realm的东西,并将该Realm插入到Shiro的配置中来完成。

但是,如何配置Realm很大程度上取决于您的运行时环境。 例如,假如运行独立应使用程序,或者者假如您有基于Web的应使用程序,或者基于Spring或者JEE容器的应使用程序或者其组合, 这种类型的配置不在本快速入门的范围之内,由于它的目的是让您对API和Shiro的概念感到满意。

当您准备好理解更多细节时,您肯定要阅读认证指南和受权指南。 而后能转到其余文档,特别是参考手册中,以答复任何其余问题。 您也可可以想要加入使用户邮件列表 – 您会发现我们有一个非常棒的社区,只需有可可以,他们都愿意提供帮助。

感谢您的关注。 我们希望您喜欢用Apache Shiro!

下次分享更高层级的实战应使用案例。


Apache Shiro 10分钟入门教程

Shiro架构

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Apache Shiro 10分钟入门教程

发表回复