安下载安全相关

分类分类

Apache Shiro(Java安全框架)

Apache Shiro(Java安全框架)

v1.7.1 官方版

大小:1.78 MB 更新:2021/02/23

类别:网络安全系统:WinXP, Win7, Win8, Win10, WinAll

立即下载

  Apache Shiro提供身份认证功能,您可以通过这款软件为自己开发的程序添加认证系统,例如可以对登录身份认证,当软件检测到对方输入的账户身份错误的时候就会禁止登录,软件会自动记录各种异常认证信息,方便后期通过查看异常信息了解登录错误情况,也方便查看是否有异常的攻击进入系统,这款软件认证功能还是非常专业的,每次进入软件都会记录认证信息,如果输入的账户正确就可以成功登录,如果遇到异常的身份尝试进入系统就会报警,您也可以通过这款软件加密通信、加密会话,也支持身份授权,具有的功能还是很多的,如果你需要这款软件就下载吧!

Apache Shiro(Java安全框架)

基本介绍

  Apache Shiro™是一个功能强大且易于使用的Java安全框架,用于执行身份验证,授权,加密和会话管理。使用Shiro易于理解的API,您可以快速轻松地保护任何应用程序-从最小的移动应用程序到最大的Web和企业应用程序。

软件功能

  Apache Shiro功能概述

  Apache Shiro旨在成为最全面,但也最易于使用的Java安全框架。以下是一些框架要点:

  在任何地方最容易理解的Java安全性API。类和接口的名称很直观,也很有意义。任何东西都是可插拔的,但是所有东西都有很好的默认值。

  支持跨一个或多个可插拔数据源(LDAP,JDBC,ActiveDirectory等)的身份验证(“登录”)。

  还可以使用可插拔数据源,根据角色或细粒度权限执行授权(“访问控制”)。

  一流的缓存支持可增强应用程序性能。

  内置基于POJO的企业会话管理。可在Web和非Web环境中使用,也可在需要单点登录(SSO)或群集或分布式会话的任何环境中使用。

  异构客户端会话访问。您不再被迫仅使用httpSession或有状态会话Bean,它们通常不必要地将应用程序绑定到特定环境。现在,无论部署环境如何,Flash Applet,C#应用程序,Java Web Start和Web应用程序等都可以共享会话状态。

  简单单点登录(SSO)支持附带上述企业会话管理。如果会话是跨多个应用程序联合的,则用户的身份验证状态也可以共享。一次登录到任何应用程序,其他都可以识别该登录。

  使用最简单的可用加密API保护数据安全,从而为您提供强大的功能和简便性,这是Java默认情况下提供的用于密码和哈希的功能。

  一个健壮而低配置的Web框架,可以保护任何URL或资源,自动处理登录和注销,执行“记住我”服务等等。

  所需依赖项的数量极少。独立配置仅需要slf4j-api.jar和slf4j的绑定.jars之一。Web配置还需要commons-beanutils-core.jar。可以在需要时添加基于功能的依赖项(Ehcache缓存,基于Quartz的会话验证,Spring依赖项注入等)。

软件特色

  Apache Shiro集成

  Shiro已被下载超过一百万次,并在数千家公司中投入生产。原因之一:它与其他技术和框架很好地集成在一起。

  Spring Application Framework将Shiro集成到独立的或基于Web的Spring应用程序中。

  Guice依赖注入框架用于使用标准Guice约定和机制的基于Guice的应用程序。

  CAS SSO服务器使用Jasig CAS SSO服务器保护您的WebApp。

  Apache Shiro会话管理功能

  轻松强大的群集功能-Shiro的会话可以使用任何易于使用的网络缓存产品轻松群集,例如Ehcache,Coherence,GigaSpaces等。等 这意味着您只能为Shiro配置一次会话群集,并且无论您部署到哪个Web容器,会话都将以相同的方式进行群集。无需特定于容器的配置!

  异构客户端访问-与EJB或Web会话不同,Shiro会话可以在各种客户端技术之间“共享”。例如,桌面应用程序可以“查看”和“共享”服务器端Web应用程序中同一用户使用的同一物理会话。除了Shiro之外,我们没有其他可以支持此功能的框架。

  事件侦听器-事件侦听器允许您在会话的生存期内侦听生命周期事件。您可以侦听这些事件并对它们做出反应,以实现自定义应用程序的行为-例如,在其会话期满时更新用户记录。

官方教程

  使用Apache Shiro保护Web应用程序的安全

  目录

  步骤1:启用Shiro

  步骤2:连接到用户商店

  步骤3:启用登录和注销

  步骤4:特定于用户的UI更改

  步骤5:只允许经过身份验证的用户访问

  步骤6:基于角色的访问控制

  步骤7:基于权限的访问控制

  概述

  尽管Apache Shiro的核心设计目标允许其用于保护任何基于JVM的应用程序,例如命令行应用程序,服务器守护程序,Web应用程序等,但本指南将重点介绍最常见的用例:保护在以下环境中运行的Web应用程序:一个的Servlet容器,如Tomcat或码头。

  步骤1:启用Shiro

  我们最初的存储库master分支只是一个简单的通用Web应用程序,可以用作任何应用程序的模板。接下来添加最低限度,以便在Web应用程序中启用Shiro。

  执行以下git checkout命令来加载step1分支:

  $ git checkout step1

  签出此分支,您将发现两个更改:

  1、src/main/webapp/WEB-INF/shiro.ini添加了一个新文件,并且

  2、src/main/webapp/WEB-INF/web.xml 被修改。

  1a:添加shiro.ini文件

  可以使用多种不同的方式在Web应用程序中配置Shiro,具体取决于您使用的Web和/或MVC框架。例如,您可以通过Spring,Guice,Tapestry等配置Shiro。

  为了使事情现在变得简单,我们将使用Shiro的默认(也是非常简单的)基于INI的配置来启动Shiro环境。

  如果签出step1分支,您将看到此新src/main/webapp/WEB-INF/shiro.ini文件的内容(为简洁起见,删除了标题注释):

Apache Shiro(Java安全框架)

  该.ini仅包含[main]具有一些最低配置的部分:

  它定义了一个新cacheManager实例。缓存是Shiro体系结构的重要组成部分-减少了与各种数据存储之间不断的往返通信。本示例使用aMemoryConstrainedCacheManager仅对单个JVM应用程序非常有用。如果您的应用程序跨多个主机(例如,群集的Web服务器场)部署,则您将要使用群集的CacheManager实现。

  它cacheManager在Shiro上配置新实例securityManager。ShiroSecurityManager实例始终存在,因此无需明确定义。

  1b:启用Shiro web.xml

  在拥有shiro.ini配置的同时,我们需要实际加载它并启动新的Shiro环境并使该环境可用于Web应用程序。

  我们通过在现有src/main/webapp/WEB-INF/web.xml文件中添加一些内容来完成所有这些工作:

Apache Shiro(Java安全框架)

  该声明定义了一个在Web应用程序启动时启动ServletContextListenerShiro环境(包括Shiro SecurityManager)的。默认情况下,此侦听器会自动知道要查找我们的WEB-INF/shiro.ini文件以进行Shiro配置。

  该声明定义了master ShiroFilter。该过滤器有望将所有请求过滤到Web应用程序中,因此Shiro可以在允许请求到达应用程序之前执行必要的身份和访问控制操作。

  该声明确保所有请求类型被提起ShiroFilter。通常,filter-mapping声明没有指定的元素,但四郎需要他们所有的定义,因此它可以过滤所有可能执行的Web应用程序的不同请求类型。

  1c:运行网络应用

  签出step1分支后,继续并运行Web应用程序:

  $ mvn jetty:run

  这次,您将看到类似于以下内容的日志输出,表明Shiro确实在您的Web应用程序中运行:

  16:04:19.807 [main] INFO o.a.shiro.web.env.EnvironmentLoader - Starting Shiro environment initialization.

  16:04:19.904 [main] INFO o.a.shiro.web.env.EnvironmentLoader - Shiro environment initialized in 95 ms.

  点击ctl-C以关闭该网络应用。

  步骤2:连接到用户商店

  执行以下git checkout命令来加载step2分支:

  $ git checkout step2

  现在,我们已将Shiro集成并在Webapp中运行。但是实际上我们还没有告诉Shiro任何事情!

  我们需要用户才能登录,注销,执行基于角色或基于权限的访问控制或任何其他与安全性相关的操作!

  我们将需要配置Shiro来访问某种类型的用户存储,以便它可以查找用户以执行登录尝试或检查角色以进行安全性决定等。任何应用程序都可能需要访问许多类型的用户存储:也许您将用户存储在一个MySQL数据库中,也许存储在MongoDB中,也许您的公司将用户帐户存储在LDAP或Active Directory中,也许您将它们存储在一个简单文件或其他专有数据存储中。

  Shiro通过所谓的Realm。根据Shiro的文档:

  领域充当Shiro与应用程序的安全数据之间的“桥梁”或“连接器”。当真正需要与安全性相关的数据(例如用户帐户)进行交互以执行身份验证(登录)和授权(访问控制)时,Shiro会从一个或多个为应用程序配置的领域中查找许多此类内容。

  从这个意义上说,领域本质上是特定于安全性的DAO:它封装了数据源的连接详细信息,并根据需要使关联数据可用于Shiro。在配置Shiro时,您必须至少指定一个领域用于身份验证和/或授权。SecurityManager可以配置有多个领域,但至少需要一个。

  Shiro提供了开箱即用的领域,可以连接到许多安全数据源(又名目录),例如LDAP,关系数据库(JDBC),文本配置源(例如INI和属性文件)等。如果默认的Realms不能满足您的需求,那么您可以插入自己的Realm实现以表示自定义数据源。

  因此,我们需要配置一个领域,以便我们可以访问用户。

  2a:设置风暴路径

  本着尽可能使本教程保持简单的精神,而又不引入会使我们脱离学习Shiro的目的的复杂性或范围,我们将使用我们可以做到的最简单的领域之一:Stormpath领域。

  Stormpath是一种云托管的用户管理服务,出于开发目的完全免费。这意味着启用Stormpath之后,您将可以进行以下操作:

  用于管理应用程序,目录,帐户和组的用户界面。Shiro根本不提供此功能,因此在您阅读本教程时,这将很方便并节省时间。

  用户密码的安全存储机制。您的应用程序无需担心密码安全性,密码比较或存储密码。虽然Shiro可以完成这些操作,但您必须对其进行配置并了解加密概念。Stormpath自动执行密码安全性,因此您(和Shiro)无需担心它,也不必为“正确设置”而烦恼。

  安全工作流程,例如帐户电子邮件验证和通过电子邮件重置密码。Shiro不支持此功能,因为它通常是特定于应用程序的。

  托管/托管的“始终在线”基础设施-您无需进行任何设置或维护。

  就本教程而言,Stormpath比设置单独的RDBMS服务器和担心SQL或密码加密问题要简单得多。因此,我们现在将使用它。

  当然,Stormpath只是Shiro可以与之通信的许多后端数据存储之一。稍后我们将介绍更复杂的数据存储及其特定于应用程序的配置。

  订阅Stormpath

  1、填写并提交Stormpath注册表格。这将发送确认电子邮件。

  2、单击确认电子邮件中的链接。

  获取Stormpath API密钥

  要使Stormpath领域与Stormpath进行通信,需要有Stormpath API密钥。要获取Stormpath API密钥:

  1、使用您用于向Stormpath注册的电子邮件地址和密码登录到Stormpath管理控制台。

  2、在结果页面的右上角,访问页面的“开发工具”部分中的“ API密钥:管理API密钥”。

  3、在“帐户详细信息”页上的“安全凭据”部分中,单击“ Api密钥”下的“创建API密钥”。

  这将生成您的API密钥,并将其作为apiKey.properties文件下载到您的计算机。如果在文本编辑器中打开文件,将看到类似以下内容的内容:

Apache Shiro(Java安全框架)

  4、将此文件保存在安全的位置,例如您的主目录在隐藏.stormpath目录中。例如:

Apache Shiro(Java安全框架)

  5、同时更改文件权限,以确保只有您可以读取此文件。例如,在* nix操作系统上:

Apache Shiro(Java安全框架)

  在Windows上,您可以类似地设置文件权限。

  检索默认的Stormpath应用程序

  当您注册Stormpath时,将自动为您创建一个空应用程序。称为:My Application。

  我们必须在Stormpath中注册我们的Web应用程序,以允许该应用程序使用Stormpath进行用户管理和身份验证。为了在My ApplicationStormpath应用程序中注册我们的Web应用程序,我们需要了解一些信息。幸运的是,我们可以使用Stormpath API检索此信息。

  首先,我们需要Stormpath中您租户的位置。这是如何得到的:

Apache Shiro(Java安全框架)

  在哪里:

Apache Shiro(Java安全框架)

  您将收到如下响应:

Apache Shiro(Java安全框架)

  注意Location标题。这是您的Stormpath租户的位置。现在,我们可以My Application再次使用API来获取Stormpath应用程序的位置:

Apache Shiro(Java安全框架)

  在哪里:

Apache Shiro(Java安全框架)

  对此的响应包含很多信息。这是响应的摘录示例:

Apache Shiro(Java安全框架)

  href从上方记下您的顶层-我们将在shiro.ini接下来的配置中使用此href 。

  创建一个应用程序测试用户帐户

  现在我们有了一个应用程序,我们将要为该应用程序创建一个样本/测试用户:

Apache Shiro(Java安全框架)

  在哪里:

Apache Shiro(Java安全框架)

  2b:在以下位置配置领域 shiro.ini

  一旦选择了至少一个要连接到Shiro的用户存储,我们就需要配置一个Realm代表该数据存储的,然后将其告知Shiro SecurityManager。

  如果您已签出step2分支,您会注意到src/main/webapp/WEB-INF/shiro.ini文件[main]部分现在增加了以下内容:

Apache Shiro(Java安全框架)

  请注意可选行:

  如果您已经使用Stormpath一段时间,并且有多个Stormpath应用程序,则stormpathRealm.applicationRestUrl必须设置该属性。

  2d:运行webapp

  在按照步骤2b和2c进行更改后,继续并运行Web应用程序:

  $ mvn jetty:run

  这次,您将看到类似于以下内容的日志输出,表明在您的Web应用程序中正确配置了Shiro和新的Realm:

Apache Shiro(Java安全框架)

  点击ctl-C以关闭该网络应用。

  步骤3:启用登录和注销

  现在我们有了用户,我们可以在UI中轻松添加,删除和禁用它们。现在,我们可以开始在应用程序中启用诸如登录/注销和访问控制之类的功能。

  执行以下git checkout命令来加载step3分支:

  $ git checkout step3

  此结帐将加载以下2个附加项:

  src/main/webapp/login.jsp使用简单的登录表单添加了新文件。我们将使用它来登录。

  该shiro.ini文件已更新,以支持特定于Web(URL)的功能。

  步骤3a:启用Shiro表单登录和注销支持

  该step3分支的src/main/webapp/WEB-INF/shiro.ini文件包含以下2个加法:

Apache Shiro(Java安全框架)

  shiro.* 线

  在该[main]部分的顶部,有一个新行:

  shiro.loginUrl = /login.jsp

  这是一个特殊的配置指令,它告诉Shiro“对于Shiro的任何任何具有属性的默认过滤器loginUrl,我都希望将该属性值设置为/login.jsp。”

  这使Shiro的默认authc过滤器(默认为a FormAuthenticationFilter)可以了解登录页面。为使FormAuthenticationFilter正常工作,这是必需的。

  现在,我们将介绍添加的两行:

  /login.jsp = authc

  /logout = logout

  第一行表示“每当Shiro看到对/login.jspURLauthc的请求时,在请求期间启用Shiro过滤器”。

  第二行表示“只要Shiro看到对/logoutURLlogout的请求,请在请求期间启用Shiro过滤器。”

  这两个过滤器都有一些特殊之处:它们实际上不需要任何“后面”的东西。他们实际上不会完全过滤,而只是完全处理请求。这意味着您无需为这些URL的请求做任何事情-无需编写控制器!Shiro将根据需要处理这些请求。

  步骤3b:添加登录页面

  由于步骤3a启用了登录和注销支持,因此现在我们需要确保实际上有一个/login.jsp页面可以显示登录表单。

  该step3分支包含一个新src/main/webapp/login.jsp页面。这是一个非常简单的以引导程序为主题的HTML登录页面,但是其中包含四点重要的内容:

  表单的action值为空字符串。当表单没有操作值时,浏览器会将表单请求提交到相同的URL。很好,因为我们将很快告诉Shiro该URL是什么,以便Shiro可以自动处理所有登录提交。其中的/login.jsp = authc行shiro.ini告诉authc过滤器处理提交。

  有一个username表单域。Shiroauthc筛选器将username在提交登录过程中自动查找请求参数,并将其用作登录过程中的值(许多领域允许该参数为电子邮件或用户名)。

  有一个password表单域。Shiroauthc过滤器将password在登录提交期间自动查找请求参数。

  有一个rememberMe复选框,其“选中”状态可以是“truthy”值(true,t,1,enabled,y,yes,或on)。

  我们login.jsp的形式只是使用默认username,password和rememberMe表单字段名称。如果您想更改它们,可以配置这些名称-有关信息,请参见FormAuthenticationFilterJavaDoc。

  步骤3c:运行webapp

  在按照步骤2b和2c进行更改后,继续并运行Web应用程序:

  $ mvn jetty:run

  步骤3d:尝试登录

  使用您的Web浏览器,导航到localhost:8080 / login.jsp,您将看到我们新的闪亮登录表单。

  输入您在第2步结束时创建的帐户的用户名和密码,然后点击“登录”。如果登录成功,您将被带到主页!如果登录失败,将再次显示登录页面。

  提示:如果您希望成功登录以将用户重定向到除主页之外的其他页面(上下文路径/),则可以authc.successUrl = /whatever在INI的[main]部分中进行设置。

  点击ctl-C以关闭该网络应用。

  步骤4:变更使用者专用的使用者介面

  通常需要根据用户身份更改Web用户界面。我们可以轻松做到这一点,因为Shiro支持JSP标记库来根据当前登录的Subject(用户)执行操作。

  执行以下git checkout命令来加载step4分支:

  $ git checkout step4

  此步骤为我们的home.jsp页面添加了一些内容:

  当前查看该页面的当前用户未登录时,他们将看到“欢迎来宾”消息,并看到登录页面的链接。

  当查看页面的当前用户的登录,他们将看到自己的名字,“欢迎用户名”和注销的链接。

  这种UI自定义类型对于导航栏非常常见,用户控件位于屏幕的右上方。

  步骤4a:添加Shiro标签库声明

  该home.jsp文件已修改为在顶部包括两行:

Apache Shiro(Java安全框架)

  这两个JSP页面指令允许页面中的Core(c:)和Shiro(shiro:)标记库。

  步骤4b:添加Shiro Guest和User标签

  该home.jsp文件在页面正文中(在

  欢迎消息之后)进行了进一步修改,以同时包含和标签:

Apache Shiro(Java安全框架)

  给定格式,阅读起来有些困难,但是这里使用了两个标签:

  :仅当当前ShiroSubject是应用程序“ guest”时,此标签才会显示其内部内容。Shiro将a定义guest为Subject尚未登录到该应用程序的任何对象,或者将其记为以前的登录名(使用Shiro的“记住我”功能)。

  :仅当当前ShiroSubject是应用程序“用户”时,此标记才会显示其内部内容。四郎定义user为任何Subject被当前中(与验证)应用程序或一个是从以前的登录记忆(使用四郎的“记住我”的功能)记录。

  如果主题是来宾,则以上代码段将呈现以下内容:

  Hi Guest! (Log in)

  “登录”是指向的超链接 /login.jsp

  如果主题是“用户”,它将呈现以下内容:

  Hi jsmith! (Log out)

  假设“ jsmith”是登录帐户的用户名。“注销”是指向Shirologout过滤器处理的“ / logout” URL的超链接。

  如您所见,您可以关闭或打开整个页面的部分,功能和UI组件。除和之外,Shiro还支持许多其他有用的JSP标记,您可以使用这些标记来基于有关当前的各种已知信息来自定义UI Subject。

  步骤4c:运行webapp

  签出step4分支后,继续并运行Web应用程序:

  $ mvn jetty:run

  尝试以访客身份访问localhost:8080,然后登录。成功登录后,您将看到页面内容更改,以反映您现在是已知用户!

  点击ctl-C以关闭该网络应用。

  步骤5:只允许经过身份验证的用户访问

  尽管您可以根据主题状态更改页面内容,但通常您会希望根据某人在与Web应用程序进行当前交互时是否已证明其身份(已验证)来限制Web应用程序的整个部分。

  如果webapp的仅用户部分显示敏感信息(例如帐单明细或控制其他用户的能力),则这一点尤其重要。

  执行以下git checkout命令来加载step5分支:

  $ git checkout step5

  步骤5引入以下3个更改:

  我们添加了Webapp的新部分(URL路径),我们希望将其限制为仅通过身份验证的用户。

  我们更改shiro.ini为告诉Shiro仅允许经过身份验证的用户访问Web应用程序的该部分。

  我们修改了主页,以根据当前Subject的身份验证与否来更改其输出。

  步骤5a:添加新的受限部分

  新src/main/webapp/account目录已添加。此目录(及其下的所有路径)模拟您可能希望限制为仅登录用户的网站的“私有”或“仅经过身份验证”部分。该src/main/webapp/account/index.jsp文件仅是模拟“家庭帐户”页面的占位符。

  步骤5b:配置 shiro.ini

  shiro.ini通过在本[urls]节末尾添加以下行来修改:

  /account/** = authc

  该Shiro过滤器链定义意味着“对任何/account(或其任何子路径)的请求都必须经过身份验证”。

  但是,如果有人尝试访问该路径或其任何子路径,会发生什么?

  您还记得在第3步中向该[main]部分添加以下行时吗:

  shiro.loginUrl = /login.jsp

  此行authc使用我们的Web应用程序的登录URL自动配置了过滤器。

  基于此配置行,authc过滤器现在已经足够聪明,可以知道如果在访问时未对当前主题进行身份验证/account,它将自动将重定向Subject到/login.jsp页面。成功登录后,它将自动将用户重定向到他们尝试访问的页面(/account)。方便的!

  步骤5c:更新我们的首页

  步骤5的最终更改是更新/home.jsp页面,以使用户知道他们可以访问网站的新部分。

  这些行添加在欢迎消息下方:

Apache Shiro(Java安全框架)

  如果当前主题在其当前会话中已经登录(认证),则该标签仅显示内容。这就是Subject知道他们可以去访问网站新部分的方式。

  如果当前主题在当前会话期间尚未通过身份验证,则该标签仅显示内容。

  但是您是否注意到notAuthenticated内容仍然具有该/account部分的URL ?没关系-我们的authc过滤器将如上所述处理登录然后重定向的流程。

  用新的更改启动Webapp并尝试一下!

  步骤5d:运行Webapp

  签出step5分支后,继续并运行Web应用程序:

  $ mvn jetty:run

  尝试访问localhost:8080。/account到达该页面后,单击新链接并观看它重定向,以强制您登录。登录后,返回首页,并在您通过身份验证后再次查看内容更改。您可以随时访问帐户页面和主页,直到注销为止。好的!

  点击ctl-C以关闭该网络应用。

  步骤6:基于角色的访问控制

  除了基于身份验证控制访问之外,通常还需要根据将什么角色分配给当前角色来限制对应用程序某些部分的访问Subject。

  执行以下git checkout命令来加载step6分支:

  $ git checkout step6

  步骤6a:添加角色

  为了执行基于角色的访问控制,我们需要角色存在。

  在本教程中,最快的方法是在Stormpath中填充一些组(在Stormpath中,Stormpath组可以起到与角色相同的作用)。

  为此,请登录到UI并按以下方式导航:

  目录>我的应用程序目录>组

  添加以下三个组:

  队长

  长官

  入伍

  (与我们的“星际迷航”帐户主题保持一致:))

  创建组后,将Jean-Luc Picard帐户添加到Captains和Officers组中。您可能要创建一些临时帐户,并将它们添加到所需的任何组中。确保某些帐户不与组重叠,以便您可以看到基于分配给用户帐户的单独组的更改。

  步骤6b:基于角色的访问控制(RBAC)标签

  我们更新/home.jsp页面以使用户知道他们拥有什么角色以及没有哪些角色。这些消息将添加

  Roles

  到主页的新部分中:

Apache Shiro(Java安全框架)

  该如果当前的主题被指派了指定角色的标签将只显示内容。

  该如果当前的主题标签将只显示内容还没有被分配指定的角色。

  步骤6c:RBAC过滤器链

  留给读者的一项练习(未定义的步骤)是创建网站的新部分,并根据分配给当前用户的角色来限制对网站该部分的URL访问。

  提示:创建一个过滤器链定义为使用的Web应用程序的新的部分roles过滤器

  步骤6d:运行webapp

  签出step6分支后,继续并运行Web应用程序:

  $ mvn jetty:run

  尝试访问localhost:8080并使用分配了不同角色的不同用户帐户登录,并观看主页“角色”部分的内容更改!

  点击ctl-C以关闭该网络应用。

  步骤7:基于权限的访问控制

  基于角色的访问控制对许多用例都适用,但存在一个主要问题:您不能在运行时添加或删除角色。角色检查使用角色名称进行硬编码,因此,如果您更改了角色名称或角色配置,或者添加或删除了角色,则必须返回并更改代码!

  因此,Shiro具有强大的侯爵功能:内置的权限支持。在Shiro中,权限是对功能的原始说明,例如“开门”,“创建博客条目”,“删除jsmith用户”等。权限反映了应用程序的原始功能,因此您仅需在以下情况下更改权限检查:您可以更改应用程序的功能-无需更改角色或用户模型。

  为了说明这一点,我们将创建一些权限并将其分配给用户,然后根据用户的授权(权限)自定义我们的Web UI。

  步骤7a:添加权限

  ShiroRealm是只读组件:每个数据存储区对角色,组,权限,帐户及其关系的建模方式都不同,因此Shiro没有“写入” API来修改这些资源。要修改基础模型对象,只需通过所需的任何API直接对其进行修改。然后,您的Shiro领域就会知道如何读取此信息并以Shiro理解的格式表示它。

  这样,由于我们在此示例应用程序中使用了Stormpath,因此我们将以特定于Stormpath API的方式为帐户和组分配权限。

  让我们执行一个cURL请求,向我们先前创建的Jean-Luc Picard帐户添加一些权限。使用该帐户的href网址,我们将apacheShiroPermissions通过自定义数据将一些内容发布到该帐户:

Apache Shiro(Java安全框架)

  其中$JLPICARD_ACCOUNT_ID与您在本教程开始时创建的Jean-Luc Picard的uid匹配。

  这将直接向Stormpath帐户添加两个权限:

  ship:NCC-1701-D:command

  user:jlpicard:edit

  它们使用Shiro的WildcardPermission语法。

  第一种基本上意味着用标识符“ NCC-1701-D”“命令”“船”的能力。这是一个实例级权限的示例:控制对资源特定实例 NCC-1701-D的访问ship。第二也是,指出一个实例级别的权限的能力edit的user具有标识符jlpicard。

  如何在Stormpath中存储权限以及如何在Stormpath中自定义存储和访问选项不在本文档的讨论范围内,但这在Shiro Stormpath插件文档中进行了说明。

  步骤7b:权限标签

  就像我们有用于角色检查的JSP标签一样,也存在用于权限检查的并行标签。我们会更新/home.jsp页面,以根据分配给他们的权限让用户知道他们是否被允许做某事。这些消息将添加

  Permissions

  到主页的新部分中:

Apache Shiro(Java安全框架)

  首次登录主页时,在登录之前,您将看到以下输出:

Apache Shiro(Java安全框架)

  但是,使用您的Jean-Luc Picard帐户登录后,您将看到以下内容:

Apache Shiro(Java安全框架)

  您可以看到Shiro解析出经过身份验证的用户具有权限,并且以适当的方式呈现了输出。

  您还可以使用标记进行肯定权限检查。

  最后,我们将引起注意,它具有权限检查的一项极为强大的功能。您是否看到第二个权限检查如何使用运行时生成的权限值?

  ...

  该${account.username}值在运行时被解释并形成最终user:aUsername:edit值,然后将最终的String值用于权限检查。

  这是非常强大的功能:您可以根据当前用户是谁以及当前正在与之交互的内容来执行权限检查。这些基于运行时的实例级权限检查是开发高度可定制且安全的应用程序的基础技术。

  步骤7c:运行Webapp

  签出step7分支后,继续并运行Web应用程序:

  $ mvn jetty:run

  尝试访问localhost:8080并使用您的Jean-Luc Picard帐户(和其他帐户)登录和注销UI,然后查看页面输出基于分配(或不分配)权限的更改!

  点击ctl-C以关闭该网络应用。

精品推荐
同类推荐
    相关下载
    • 最新排行
    • 最热排行
    • 评分最高
    安全相关排行榜
    实时热词