- 软件介绍
- 相关专题
- 下载地址
Apache Shiro简介
Apache Shi提供身份认证功能,您可以通过该软件为自己的程序添加一个认证系统。例如,您可以验证登录身份。当软件检测到对方输入的账号有误时,会禁止登录,软件会自动记录各种异常认证,方便以后查看异常情况,查看是否有异常攻击进入系统,了解登录错误情况。这个软件认证功能还是很专业的。每次进入软件,都会记录认证情况。如果输入的帐户正确,您可以成功登录。如果遇到异常身份企图进入系统,会报警。您还可以通过该软件加密通信和会话,并支持身份授权。还有很多功能!
Apache Shi基本介绍
Apache Shi是一个功能强大且易于使用的Java安全框架,用于身份验证、授权、加密和会话管理。施易于理解的API使您能够快速轻松地保护任何应用程序-从最小的移动应用程序到最大的Web和企业应用程序。
Apache Shi软件功能
Apache石函数概述
Apache Shi的目标是成为最全面、最易用的Java安全框架。以下是一些框架要点:
在任何地方都最容易理解的Java安全API。类和接口的名字直观而有意义。一切都是可插拔的,但是一切都有一个好的默认值。
支持跨一个或多个可插拔数据源(LDAP、JD、ActiveDirectory等)的身份验证(“登录”)。).
您还可以使用可插入的数据源来执行基于角色或细粒度权限的授权(“访问控制”)。
一流的缓存支持可以提高应用程序性能。
基于内置POJO的企业会话管理。它可以在网络和非网络环境中使用,也可以在任何需要单点登录(SSO)或集群或分布式会话的环境中使用。
异构客户端会话访问。您不再被迫只使用httpSession或有状态会话Bean,这通常会不必要地将应用程序绑定到特定环境。现在,无论部署环境如何,Flash Applet、C #应用程序、Java Web Start和Web应用程序都可以共享会话状态。
简单单点登录(SSO)支持上述企业会话管理。如果会话跨多个应用程序联合,用户的身份验证状态也可以共享。一旦您登录到任何应用程序,其他人就可以识别登录。
使用最简单的可用加密API来保护数据安全,从而为您提供强大的功能和简单性,这是Java默认提供的密码和哈希功能。
一个健壮且低配置的Web框架可以保护任何L或资源,自动处理登录和注销,以及执行“记住我”服务等。
所需依赖项的数量非常少。配置只需要slf4j-api.jar和slf4j的binding.jars中的一个。网络配置也需要公摊核心..可以添加基于函数的依赖关系(Ehcache缓存、基于Quartz的会话认证、Spng依赖注入等)。)在需要的时候。
Apache Shi软件特色
阿帕奇石集成
《时》已被下载超过百万次,并在数千家公司投入生产。原因之一:它与其他技术和框架很好地集成在一起。
ngapplication框架将Shi集成到基于web的Spng应用程序中。
Guice依赖注入框架用于使用标准Guice约定和机制的基于Guice的应用程序。
CAS SSO使用Jasig CAS SSO来保护您的WebApp。
Apache石会话管理功能
轻松强大的集群功能——使用任何易用的网络缓存产品,如Ehcache、Coherence、GigaSpaces等,都可以轻松对师的会话进行集群。这意味着您只能为Shi配置一次会话群集,并且无论您部署到哪个Web容器,会话都将以相同的方式进行群集。不需要特定于容器的配置!
异构客户端访问-与e或Web会话不同,Shi会话可以在各种客户端技术之间“共享”。例如,桌面应用程序可以“查看”和“共享”网络应用程序中同一用户使用的同一物理会话。除了石,我们没有其他框架支持这个功能。
事件侦听器-事件侦听器允许您在会话的生存期内侦听生命周期事件。您可以监听这些事件并对它们做出反应,以实现自定义的应用程序行为——例如,当用户的会话到期时更新用户记录。
Apache Shi教程
使用Apache Shi保护网络应用程序
目录
第一步:启用施
步骤2:连接到用户商店
步骤3:启用登录和注销
步骤4:用户特定的用户界面更改
步骤5:只允许经过身份验证的用户访问。
步骤6:基于角色的访问控制
步骤7:基于权限的访问控制
摘要
虽然Apache Shi的核心设计目标允许它用于保护任何基于JVM的应用程序,如命令行应用程序、守护程序、Web应用程序等。,本指南将关注最常见的用例:保护在以下环境中运行的Web应用程序:新的Servlet容器,如Tomcat或dock。
第一步:启用施
我们最初的存储库主分支只是一个简单的通用Web应用程序,可以用作任何应用程序的模板。接下来,添加一个最小值以在Web应用程序中启用Shi。
执行以下git checkout命令来加载步骤1分支:
$ git结账步骤1
查看这个分支,您会发现两个变化:
1.src/main/web app/web-INF/Shi . ini添加了一个新文件,并且
2.修改了src/main/web app/web-INF/web . XML。
1a:添加. ini文件
您可以根据所使用的Web和/或MVC框架,以多种不同的方式在Web应用程序中配置Shi。比如可以通过Spng、Guice、Tapestry等来配置Shi。
现在让事情变得简单,我们将使用Shi的默认(也非常简单)基于INI的配置来启动Shi环境。
如果您查看step1分支,您将看到这个新的src/main/web app/web-INF/Shi . ini文件的内容(为简洁起见,标题注释已被删除):
那个。ini只包含[main]的一部分,具有一些最低配置:
它定义了一个新的cacheMar实例。缓存是Shi架构的重要组成部分——减少与各种数据存储的连续往返通信。本例中使用的aMemoryConstrainedCacheMar仅对单个JVM应用程序非常有用。如果您的应用程序部署在多个主机上(例如,一个集群Web服务器场),您将使用集群CacheMar实现。
它cacheMar在Shi上配置了一个secutyMar的新实例。ShiSecutyMar实例总是存在的,所以不需要明确定义。
1b:启用Shiweb.xml。
使用shi.ini配置,我们需要实际加载它并启动新的shi环境,并使其可用于Web应用程序。
我们通过向现有的src/main/web app/web-INF/web . XML文件中添加一些内容来实现所有这些:
这个声明定义了一个在Web应用程序启动时启动ServletContextListenerShi环境(包括Shi SecutyMar)的程序。默认情况下,这个监听器会自动知道找到我们的用于Shi配置的WEB-INF/Shi.ini文件。
这个声明定义了主过滤器。预计该过滤器将过滤所有进入Web应用程序的请求,因此Shi可以在允许请求到达应用程序之前执行必要的身份和访问控制。
这个声明确保所有的请求类型都被引发,ShiFilter。通常,过滤器映射声明没有指定的元素,但是Shiro需要它们的所有定义,所以它可以过滤所有可能的Web应用程序的不同请求类型。
1c:运行网络应用程序
签出步骤1分支后,继续运行网络应用程序:
$ mvn jetty:运行
这一次,您将看到类似以下内容的博客输出,这表明Shi确实在您的Web应用程序中运行:
16:04:19.807【主】INFO o . a . Shi . web . env . environmentloader & # 8211;开始石环境初始化。
16:04:19.904【主】INFO o . a . Shi . web . env . environmentloader & # 8211;石环境初始化在95毫秒。
单击ctl-C关闭网络应用程序。
步骤2:连接到用户商店
执行以下git checkout命令来加载步骤2分支:
$ git结账步骤2
现在,我们已经整合了师,并在Webapp中运行它。但是实际上我们还没有告诉史任何事情!
我们需要用户登录、注销、执行基于角色或基于权限的访问控制或任何其他与安全相关的工作!
我们需要将Shi配置为访问某种类型的用户存储,以便它可以找到用户来执行登录尝试或角色来做出安全决策等。任何应用程序都可能需要访问多种类型的用户存储:也许您将用户存储在MySQL数据库中,也许存储在MongoDB中,也许您的公司将用户帐户存储在LDAP或活动目录中,也许您将它们存储在简单的文件或其他专有数据存储中。
石通过所谓的境界。据史的文献记载:
该域充当Shi和应用程序的安全数据之间的“桥梁”或“连接器”。当确实需要与安全相关数据(如用户帐户)交互以执行身份验证(登录)和授权(访问控制)时,Shi会从为应用程序配置的一个或多个域中找到许多此类内容。
从这个意义上说,域本质上是一个特定于安全性的DAO:它封装了数据源的连接细节,并根据需要使关联数据对Shi可用。配置Shi时,必须至少指定一个身份验证和/或授权领域。SecutyMar可以配置多个域,但至少需要一个域。
Shi提供了一个开箱即用的域,可以连接到很多安全的数据源(也称为目录),比如LDAP、关系数据库(JD)、文本配置源(比如INI和genus文件)等。如果默认领域不能满足您的需求,您可以插入自己的领域实现来表示自定义数据源。
因此,我们需要配置一个域,以便能够访问用户。
2a:设置风暴路径
本着让本教程尽可能简单的精神,不引入将我们与学习史的目的分开的复杂性或范围,我们将使用我们能做的最简单的字段之一:Stormpath字段。
Stormpath是一个云托管的用户管理服务,完全免费用于开发目的。这意味着在启用Stormpath后,您将能够执行以下操作:
用于管理应用程序、目录、帐户和组的用户界面。史根本没有提供这个功能,所以看这个教程的时候会方便一些,也省时间。
用户密码的安全存储机制。您的应用程序不需要担心密码安全、密码比较或密码存储。虽然石可以做到这一点,但你必须配置它,并了解加密的概念。Stormpath自动执行密码安全,你(和史)不用担心,也不用担心“设置不正确”。
安全的工作流程,如帐户电子邮件验证和通过电子邮件重置密码。Shi不支持此功能,因为它通常是特定于应用程序的。
托管/托管的“始终在线”基础架构-您不需要进行任何设置或。
在本教程中,Stormpath比设置单独的RDBMS和担心SQL或密码加密要简单得多。所以,我们现在就用。
当然,Stormpath只是施可以与之通信的众多后端数据存储之一。稍后,我们将介绍更复杂的数据存储及其特定于应用程序的配置。
订阅风暴路径
1.填写并提交Stormpath登记表。这将发送一封确认电子邮件。
2.单击确认电子邮件中的链接。
获取风暴路径应用编程接口密钥
要使风暴路径领域与风暴路径通信,需要一个风暴路径应用编程接口密钥。要获取风暴路径应用编程接口密钥:
1.使用您用于向Stormpath注册的电子邮件地址和密码登录Stormpath管理控制台。
2.在结果页面的右上角,访问页面“开发工具”部分的“API键:管理API键”。
3.在“帐户详细信息”页面的“安全凭据”部分,单击“应用编程接口密钥”下的“创建应用编程接口密钥”。
这将生成您的应用编程接口密钥,并将其作为apiKey.pperties文件下载到您的计算机上。如果在文本编辑器中打开该文件,您将看到类似以下内容的内容:
4.将此文件保存在安全的位置,例如,您的主目录处于隐藏状态。stormpath目录。示例:
5.同时,更改文件权限以确保只有您可以读取该文件。例如,在* nix操作系统上:
在Windows上,您可以类似地设置文件权限。
检索默认的风暴路径应用程序
当您注册Stormpath时,将自动为您创建一个空应用程序。名为:我的应用程序。
我们必须在风暴路径中注册我们的网络应用程序,以允许应用程序使用风暴路径进行用户管理和身份验证。为了在我的应用程序路径应用程序中注册我们的网络应用程序,我们需要知道一些事情。幸运的是,我们可以使用风暴路径应用编程接口来检索这个。
首先,我们需要你的房客在风暴路径的位置。你是怎么得到这个的:
其中:
您将收到以下回复:
注意位置标题。这是您的风暴路径租户的位置。现在,我们可以通过“我的应用程序”再次使用该应用编程接口来获取Stormpath应用程序的位置:
其中:
对此的回应包含很多。这是回应的摘录示例:
Href从顶部写下您的顶层-我们将在shi.ini的下一个配置中使用这个href
创建应用程序测试用户帐户。
现在我们有了一个应用程序,我们将为该应用程序创建一个示例/测试用户:
其中:
2b:在以下位置配置域名系统
一旦选择了至少一个要连接到Shi的用户存储,我们就需要配置一个Realm来表示数据存储,并将它通知给Shi SecutyMar。
如果您已经签出了step2分支,您会注意到以下内容现在已添加到src/main/web app/web-INF/Shi . ini文件的[main]部分:
请注意可选行:
如果您已经使用Stormpath一段时间,并且有多个Stormpath应用程序,那么请选择StormPathRealm。ApplicationResturl必须设置此属。
2d:运行webapp
根据步骤2b和2c进行更改后,继续运行网络应用程序:
$ mvn jetty:运行
这一次,您将看到类似于下面的博客输出,它显示了在您的Web应用程序中正确配置了Shi和新Realm:
单击ctl-C关闭网络应用程序。
步骤3:启用登录和注销
现在我们有了用户,我们可以在UI中轻松地添加、删除和禁用他们。现在,我们可以开始在应用程序中启用登录/注销和访问控制等功能。
执行以下git checkout命令来加载步骤3分支:
$ git结账步骤3
本次结帐将加载以下2个附加项目:
Src/main/webapp/login.jsp使用简单的登录表单添加新文件。我们将使用它登录。
shi.ini文件已经更新,支持特定于Web(L)的功能。
步骤3a:启用Shi表单登录和注销支持
step3分支的src/main/web app/web-INF/Shi . ini文件包含以下两个新增内容:
石。*行
在这个[主]部分的顶部,有一个新行:
shi.loginUrl = /login.jsp
这是一个特殊的配置指令,告诉Shi“对于Shi的任何有亏格的默认过滤器loginUrl,我想将亏格值设置为/login.jsp。”
这使得Shi的默认thc过滤器(默认为FormAuthenticationFilter)能够知道登录页面。这是FormAuthenticationFilter正常工作所必需的。
现在,我们将介绍添加的两行:
/login.jsp = thc
/注销=注销
第一行表示“每当Shi看到/login.jspLthc的请求时,在请求期间启用Shi过滤器”。
第二行写道:“只要Shi看到/logoutlogout的请求,请在请求过程中启用Shi过滤器。”
这两个过滤器都有一些特别之处:它们并不真正需要任何“背后”的东西。它们实际上并不完全过滤,而只是完全处理请求。这意味着您不必为这些L请求做任何事情——您不必编写控制器!石将根据需要处理这些请求。
步骤3b:添加登录页面
由于步骤3a启用了登录和注销支持,现在我们需要确保实际上有一个/login.jsp页面可以显示登录表单。
step3分支包含一个新的src/main/webapp/login.jsp页面。这是一个非常简单的以bootloader为主题的HTML登录页面,但是它包含了四个重要的内容:
表单的操作值是一个空字符串。当表单没有值时,浏览器会将表单请求提交给同一个L. Good,因为我们很快就会告诉Shi这个L是什么,这样Shi就可以自动处理所有的登录提交。其中/login.jsp = thc line shi.ini告诉thc filter处理提交。
有一个用户名表单字段。Shithc过滤器会在提交登录过程中自动找到用户名的请求参数,并在登录过程中将其用作值(许多字段允许该参数为电子邮件或用户名)。
有一个密码表单字段。Shithc过滤器将在登录提交过程中自动找到密码请求参数。
有一个“记住我”复选框,它的“选中”状态可以是“真”值(真、t、1、启用、y、是或开)。
我们的login.jsp表单只使用默认的用户名、密码和记住我的表单字段名称。如果您想更改它们,您可以配置这些名称-有关更多信息,请参见FormAuthenticationFilterJavadoc。
步骤3c:运行网络应用程序
根据步骤2b和2c进行更改后,继续运行网络应用程序:
$ mvn jetty:运行
第三步:尝试登录
使用您的网络浏览器,导航到localhost: 8080/login.jsp,您将看到我们新的闪亮的登录表单。
输入您在步骤2结束时创建的帐户的用户名和密码,然后单击“登录”。如果登录成功,会被带到首页!如果登录失败,将再次显示登录页面。
提示:如果想成功登录将用户重定向到主页(上下文路径/)以外的其他页面,可以在INI的[main]部分设置thc.successUrl = /whatr。
单击ctl-C关闭网络应用程序。
步骤4:更改特定于用户的用户界面
通常需要根据用户身份更改Web用户界面。我们可以轻松做到这一点,因为Shi支持P标签库根据当前登录的Subject(用户)执行动作。
执行以下git checkout命令来加载步骤4分支:
$ git结账步骤4
这一步为我们的home.jsp页面增加了一些内容:
当当前正在查看页面的当前用户没有登录时,他们将看到消息“欢迎客人”,并看到登录页面的链接。
当查看页面当前用户的登录时,他们会看到自己的名字、“欢迎用户名”和注销链接。
这种类型的用户界面定制对于导航栏来说非常常见,用户控件位于屏幕的右上角。
步骤4a:添加Shi标签库声明
home.jsp文件已被修改,在顶部包含两行:
这两个P-page指令允许在页面中使用Core(c:)和Shi(shi:)标记库。
步骤4b:添加用户和用户标签
home.jsp文件在页面的正文中(在
在欢迎消息之后)被进一步修改以包括和标签:
给定格式,很难阅读,但这里使用了两个标签:
:只有当当前的ShiSubject是应用程序“guest”时,此标记才会显示其内容。将“是”定义为“主体”未登录到应用程序的任何对象,或将其记录为以前的登录名(客户“是”的“记得我”功能)。
:只有当当前的ShiSubject是应用程序“用户”时,该标签才会显示其内部内容。Shiro将用户定义为应用程序当前记录的任何主题(通过身份验证)或从以前的登录内存中记录的主题(使用Shiro的“记住我”功能)。
如果主题是来宾,上面的代码片段将呈现以下内容:
嗨,客人!(登录)
“登录”是指向/login.jsp的超链接。
如果主题是“用户”,它将呈现以下内容:
嗨,杰史密斯!(注销)
假设“jsmith”是登录帐户的用户名。“注销”是一个超链接,指向由Shilogout过滤器处理的“/注销”l。
如您所见,您可以关闭或打开整个页面的部件、功能和UI组件。除了和之外,Shi还支持许多其他有用的p标记,您可以使用这些标记根据各种已知的当前情况信息自定义UI Subject。
步骤4c:运行网络应用程序
签出步骤4分支后,继续运行网络应用程序:
$ mvn jetty:运行
尝试以来宾身份访问localhost:8080并登录。成功登录后,您将看到页面内容发生变化,以反映您现在是已知用户!
单击ctl-C关闭网络应用程序。
步骤5:只允许经过身份验证的用户访问。
虽然可以根据主题状态更改页面内容,但通常要根据当前与Web应用的交互中是否有人证明了自己的身份(已验证),来限制Web应用的整个部分。
如果webapp的用户专用部分是敏感的(例如计费细节或控制其他用户的能力),这一点尤其重要。
执行以下git checkout命令来加载步骤5分支:
$ git结账步骤5
步骤5介绍了以下三个变化:
我们已经添加了Webapp的一个新部分(L路径),我们希望将其仅限于经过身份验证的用户。
我们更改了Shi.ini,告诉Shi只有经过身份验证的用户才允许访问Web应用程序的这一部分。
我们修改了主页,根据当前主题是否经过身份验证来更改其输出。
步骤5a:添加新的受限零件
新的src/main/web app/帐户目录已添加。该目录(及其下的所有路径)模拟了网站的“私有”或“仅经过身份验证”部分,您可能希望将其限制为仅登录用户。src/main/web app/Account/index . JSP文件只是模拟“家庭账户”页面的占位符。
第5b步:配置软件
Shi.ini通过在这个[URL]部分的末尾添加以下一行进行了修改:
/account/** = thc
石过滤链的定义是“对/account(或其任何子路径)的任何请求都必须经过身份验证”。
但是,如果有人试图访问此路径或其任何子路径,会发生什么?
你还记得在第3步中在这个[主]部分添加了以下几行吗:
shi.loginUrl = /login.jsp
这一行使用我们的网络应用程序的登录名来自动配置过滤器。
基于这个配置行,thc过滤器现在足够智能,知道如果当前主题在访问时没有经过身份验证/帐户,它将自动将主题重定向到/login.jsp页面。成功登录后,它会自动将用户重定向到他们试图访问的页面(/account)。方便!
步骤5c:更新我们的主页
步骤5的最后一个变化是更新/home.jsp页面,让用户知道他们可以访问网站的新部分。
这些行被添加到欢迎消息下:
如果当前主题已在其当前会话中登录(验证),此选项卡仅显示内容。这是主题如何知道他们可以访问网站的新部分。
如果当前主题在当前会话期间未通过身份验证,此选项卡仅显示内容。
但是你有没有注意到未经认证的内容仍然有这个/账号的L部分?没关系-我们的thc过滤器将处理如上所述的登录重定向过程。
用新的更改启动Webapp,并尝试一下!
第5d步:运行网络应用程序
签出步骤5分支后,继续运行网络应用程序:
$ mvn jetty:运行
尝试访问localhost:8080。当/account到达此页面时,单击新链接并观察其重定向以强制您登录。登录后,返回主页并在通过身份验证后再次检查内容更改。您可以随时访问帐户页面和主页,直到您注销。好的。
单击ctl-C关闭网络应用程序。
步骤6:基于角色的访问控制
除了基于身份验证来控制访问之外,通常还需要根据当前角色分配的角色来限制对应用程序Subject某些部分的访问。
执行以下git checkout命令来加载步骤6分支:
$ git结账步骤6
步骤6a:添加角色
为了执行基于角色的访问控制,我们需要角色的存在。
在本教程中,最快的方法是在风暴路径中填充一些组(在风暴路径中,风暴路径组可以扮演与角色相同的角色)。
为此,请登录到用户界面并按如下方式导航:
目录>我的应用程序目录>:组
添加以下三组:
船长
高级军官
参军
(与我们星际迷航账号的主题一致:)
创建组后,将让·卢克·皮卡德帐户添加到队长和军官组。您可能想要创建一些临时帐户,并将其添加到任何您想要的组中。确保某些帐户不与组重叠,以便您可以看到基于分配给用户帐户的单个组的更改。
步骤6b:基于角色的访问控制(RBAC)标签
我们更新/home.jsp页面,让用户知道自己有什么角色,没有什么角色。这些消息将被添加。
角色
转到主页的新部分:
如果当前主题被分配了特定的角色标签,将只显示内容。
如果当前主题标签将只显示内容尚未被分配指定的角色。
步骤6c: RBAC滤波器链
读者的一个练习(未定义的步骤)是创建网站的新部分,并根据分配给当前用户的角色限制L对网站这一部分的访问。
提示:创建一个新的部分les过滤器,过滤器链定义为使用的网络应用程序。
步骤6d:运行webapp
签出步骤6分支后,继续运行网络应用程序:
$ mvn jetty:运行
试着访问localhost:8080,用分配了不同角色的不同用户账号登录,在主页的“角色”部分观看变化!
单击ctl-C关闭网络应用程序。
步骤7:基于权限的访问控制
基于角色的访问控制适用于许多用例,但是有一个主要问题:您不能在运行时添加或删除角色。使用角色名称进行硬编码,因此如果您更改角色名称或角色配置,或者添加或删除角色,您必须返回并更改代码!
所以石有一个强大的侯爵功能:内置权限支持。在《时》中,权限是对功能的原始描述,如“开门”、“创建博客条目”、“删除jsmith用户”等。权限反映了应用程序的原始功能,因此您只需要在以下情况下更改权限:您可以更改应用程序的功能,而无需更改角色或用户模型。
为了说明这一点,我们将创建一些权限并将其分配给用户,并根据用户的授权(权限)定制我们的Web UI。
步骤7a:添加权限
ShiRealm是一个只读组件:每个数据存储以不同的方式建模角色、组、权限、帐户及其关系,因此Shi没有“写”API来修改这些资源。要修改基础模型对象,只需要通过任何需要的API直接修改即可。,您的施域将知道如何阅读此,并以施理解的格式表达它。
这样,因为我们在这个示例应用程序中使用了Stormpath,所以我们将以特定于Stormpath API的方式为帐户和组分配权限。
让我们执行一个cL请求,向我们之前创建的让·卢克·皮卡德帐户添加一些权限。使用此帐户的href网站,我们将通过apacheShiPermissions通过自定义数据向此帐户发布一些内容:
其中$JLPICARD_ACCOUNT_ID与您在本教程开始时创建的让·卢克·皮卡德的uid相匹配。
这将直接向Stormpath帐户添加两个权限:
舰:NCC-1701-D:司令部
用户:jlpicard:编辑
他们使用的是“是”的WildcardPermission语法。
第一种基本上是指使用标识符“NCC-1701-D”来“指挥”和“运送”的能力。这是一个实例级权限的例子:控制对特定资源实例NCC-1701-D的访问权限。其次,它指出实例级权限能力编辑的用户具有标识符jlpicard。
如何在Stormpath中存储权限以及如何在Stormpath中自定义存储和访问选项超出了本文档的范围,但这在Shi Stormpath插件文档中有所说明。
步骤7b:许可标签
正如我们有角色的P标签,也有权限的平行标签。我们将更新/home.jsp页面,让用户知道是否允许他们根据分配给他们的权限做一些事情。这些消息将被添加。
许可
转到主页的新部分:
第一次登录主页时,登录前,会看到如下输出:
但是,使用您的让·卢克·皮卡德帐户登录后,您将看到以下内容:
您可以看到,Shi解析出经过身份验证的用户拥有权限,并以适当的方式呈现了输出。
您也可以使用标签来确认权限。
最后,我们会注意到它具有极其强大的权限功能。您看到第二个权限如何使用运行时生成的权限值了吗?
…
在运行时解释${account.username}的值,并形成最终的用户:aUsername:edit值,最终的Stng值用于权限。
这是一个非常强大的功能:您可以根据当前用户是谁以及他当前正在与什么交互来执行权限。这些基于运行时的实例级权限是开发高度可定制和安全的应用程序的基本技术。
步骤7c:运行网络应用程序
签出步骤7分支后,继续运行网络应用程序:
$ mvn jetty:运行
尝试访问localhost:8080,使用你的让·卢克·皮卡德账号(和其他账号)登录和注销UI,根据分配(或未分配)的权限查看页面输出的变化!
单击ctl-C关闭网络应用程序。
- 安卓合集
- 软件合集
- 浏览器
- 电脑管家
- 安卓游戏
软件排行榜
热门推荐
-
AES安全加密记事本
v1.0 / 629.46K / 简体中文
-
Folder Password Lock Pro最新版
v10.8 / 6M / 简体中文
-
Free Videos Copy Protection官方版
v2.0.0 / 13.7 MB / 简体中文
-
恒隆文档加密
v8.8.2 / 20.91M / 简体中文
-
UdiskHelper中文版
v1.7 / 1M / 简体中文
-
Free Excel Password Recovery官方版
v2.5.0 / 11.6 MB / 简体中文
-
MD5加密工具
v1.0 / 6.64M / 简体中文
-
清理间谍程序工具正式版
v1.0 / 3M / 简体中文
-
熊猫反病毒程序
v1.0 / 72.57M / 简体中文
-
安天终极专杀AVL PK简体中文版
v2.1.4 / 308K / 简体中文
装机必备软件
-
word文档密码破解工具应用软件
-
冰点还原永久免费版系统软件
-
人生日历应用软件
-
一彩送货单管理系统应用软件
-
Process View系统软件
-
开心手机恢复大师其他类别
-
pdf文件阅读器应用软件
-
视频剪辑格式工厂应用软件
-
PhotoMetri应用软件
-
specinker应用软件
-
miwifi驱动驱动工具
-
海洋色音效助手影音软件
-
乐播投屏影音软件
-
seo外链助手网络软件
-
AES安全加密记事本安全相关





