`
peterwanghao
  • 浏览: 128103 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Apache Shiro Web应用整合-标签库

阅读更多

Apache Shiro 提供了一个JSP/GSP 标签库,它允许你控制你的JSPJSTL GSP 页面基于当前Subject的状态进行输出。这对于根据用户身份和当前用户的授权状态来提供个性化视图是相当有用的。

标签库的描述文件(TLD)保存在shiro-web.jar里的META-INF/shiro.tld文件。要使用任何标签,需要在你JSP 页面(或任何你定义的页面指令)的顶部添加下面一行:

<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>

我们使用shiro 前缀用以表明shiro 标签库命名空间,当然你可以指定任何你喜欢的名字。

下面将分别介绍每一个标签,并展示它是如何用来渲染页面的。

The guest tag

guest 标签将显示它包含的内容,仅当当前的Subject 被认为是'guest'时。'guest'是指没有身份ID 的任何Subject。也就是说,我们并不知道用户是谁,因为他们没有登录并且他们没有在上一次的访问中被记住(RememberMe 服务)。例如:

<shiro:guest>

Hi there! Please <a href="login.jsp">Login</a> or <a href="signup.jsp">Signup</a>today!

</shiro:guest>

guest 标签与user 标签逻辑相反。

The user tag

user 标签将显示它包含的内容,仅当当前的Subject 被认为是'user'时。'user'在上下文中被定义为一个已知身份IDSubject,或是成功通过身份验证及通过'RememberMe'服务的。请注意这个标签在语义上与authenticated 标签是不同的,authenticated 标签更为严格。例如:

<shiro:user>

Welcome back John! Not John? Click <a href="login.jsp">here<a> to login.

</shiro:user>

usre 标签与guest 标签逻辑相反。

The authenticated tag

仅仅只当当前用户在当前会话中成功地通过了身份验证authenticated 标签才会显示包含的内容。它比'user'标签更为严格。它在逻辑上与'notAuthenticated'标签相反。

authenticated 标签只有当当前Subject 在其当前的会话中成功地通过了身份验证才会显示包含的内容。它比user 标签更为严格,authenticated 标签通常在敏感的工作流中用来确保身份ID 是可靠的。例如:

<shiro:authenticated>

<a href="updateAccount.jsp">Update your contact information</a>.

</shiro:authenticated>

authenticated 标签与notAuthenticated 标签逻辑相反。

The notAuthenticated tag

notAuthenticated 标签将会显示它所包含的内容,如果当前Subject 还没有在其当前会话中成功地通过验证。例如:

<shiro:notAuthenticated>

Please <a href="login.jsp">login</a> in order to update your credit card information.

</shiro:notAuthenticated>

notAuthenticated 标签与Authenticated 标签逻辑相反。

The principal tag

principal 标签将会输出Subject 的主体(标识属性)或主要的属性。

若没有任何标签属性,则标签将使用principal toString()值来呈现页面。例如(假设principal 是一个字符串的用户名):

Hello, <shiro:principal/>, how are you today?

这一般等价于下面:

Hello, <%= SecurityUtils.getSubject().getPrincipal().toString() %>, how are you today?

principal 标签默认情况下,假定该principal 输出的是subject.getPrincipal()的值。但若你想输出一个不是主要principal的值,而是属于另一个Subject principal collection,你可以通过类型来获取该principal 并输出该值。

例如,输出Subject 的用户ID(并不是username),假设该ID 属于principal collection

User ID: <principal type="java.lang.Integer"/>

这一般等价于下面:

User ID: <%= SecurityUtils.getSubject().getPrincipals().oneByType(Integer.class).toString() %>

但如果该principal是一个复杂的对象而不是一个简单的字符串,而且你希望引用该principal 上的一个属性该怎么办呢?你可以使用property 属性来来表示property 的名称来理解(必须通过JavaBeans 兼容的getter 方法访问)。例如(假设principal 是一个User 对象):

Hello, <shiro:principal property="firstName"/>, how are you today?

这一般等价于下面:

Hello, <%= SecurityUtils.getSubject().getPrincipal().getFirstName().toString() %>, how are you today?

如果结合属性类型如下:

Hello, <shiro:principal type="com.foo.User" property="firstName"/>, how are you today?

这一般等价于下面:

Hello, <%= SecurityUtils.getSubject().getPrincipals.oneByType(com.foo.User.class).getFirstName().toString() %>, how are you today?

 

The hasRole tag

hasRole 标签将会显示它所包含的内容,仅当当前Subject 被分配了具体的角色。例如:

<shiro:hasRole name="administrator">

<a href="admin.jsp">Administer the system</a>

</shiro:hasRole>

hasRole 标签与lacksRole 标签逻辑相反。

The lacksRole tag

lacksRole 标签将会显示它所包含的内容,仅当当前Subject 未被分配具体的角色。例如:

<shiro:lacksRole name="administrator">

Sorry, you are not allowed to administer the system.

</shiro:lacksRole>

lacksRole 标签与hasRole 标签逻辑相反。

The hasAnyRole tag

hasAnyRole 标签将会显示它所包含的内容,如果当前的Subject 被分配了任意一个来自于逗号分隔的角色名列表中的具体角色。例如:

<shiro:hasAnyRole name="developer, project manager, administrator">

You are either a developer, project manager, or administrater.

</shiro:hasAnyRole>

hasAnyRole 标签目前还没有与之逻辑相反的标签。

The hasPermission tag

hasPermission 标签将会显示它所包含的内容,仅当当前Subject“拥有”(蕴含)特定的权限。也就是说,用户具有特定的能力。例如:

<shiro:hasPermission name="user:create">

<a href="createUser.jsp">Create a new User</a>

</shiro:hasPermission>

hasPermission 标签与lacksPermission 标签逻辑相反。

The lacksPermission tag

lacksPermission 标签将会显示它所包含的内容,仅当当前Subject 没有拥有(蕴含)特定的权限。也就是说,用户没有特定的能力。例如:

<shiro:lacksPermission name="user:delete">

Sorry, you are not allowed to deleted user accounts.

</shiro:hasPermission>

lacksPermission 标签与hasPermission 标签逻辑相反。

分享到:
评论

相关推荐

    shiro1.7.1.zip

    Apache Shiro 是一个强大且易用的Java安全框架,提供了身份认证、授权、加密和会话管理功能,简化了企业级应用的安全实现。标题中的"shiro1.7.1.zip"表明这是一个包含Apache Shiro 1.7.1版本所有核心模块的压缩包,...

    shiro1.7.1全包修补漏洞.rar

    Apache Shiro是一个强大的Java安全框架,它为应用程序提供了身份验证、授权、会话管理和加密服务。这个"shiro1.7.1全包修补漏洞.rar"文件包含了针对Apache Shiro 1.7.1版本的一些安全修复和更新,旨在解决可能存在的...

    shiro-1.7.1.zip

    Apache Shiro是一个强大的Java安全框架,它为应用程序提供了身份验证(Authentication)、授权(Authorization)、会话管理(Session Management)和加密(Cryptography)等核心功能。`shiro-1.7.1.zip`是一个包含...

    shiro最简单整合版本

    在本文中,我们将深入探讨 Apache Shiro 的核心概念及其最简单的整合方式。 一、Shiro 的核心组件 1. 身份认证(Authentication):这是验证用户身份的过程,通常涉及用户名和密码的输入。Shiro 提供了 Realm 接口...

    Apache Shiro 集成-spring

    Apache Shiro 是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能,可以非常轻松地开发出足够安全的应用。Shiro 不仅可以用于Java Web 应用,也可以用于独立的Java应用。在集成Spring时,Shiro ...

    Apache Shiro中文开发文档.pdf

    - **应用场景**:无论是简单的命令行应用还是大型集群Web应用,Shiro均能提供一致的安全支持。 通过以上详细解析,我们可以看到Apache Shiro 不仅是一款功能全面的安全框架,而且其设计上注重易用性和灵活性,非常...

    Apache Shiro教程

    Apache Shiro是一个强大的Java安全框架,它为应用程序提供了身份验证、授权、会话管理和加密等功能。这个教程将帮助你深入理解和有效地使用Shiro框架。在本文中,我们将详细探讨Shiro的核心概念、主要功能和常见用法...

    shiro-springmvc-gradle整合

    整合Apache Shiro、Spring MVC和Gradle是一个综合性的任务,涵盖了安全控制、Web应用架构和构建自动化等多个方面。通过这样的整合,我们可以构建出一个高效、安全、易于维护的Web应用。在实际操作中,每个环节的配置...

    shiro-shiro-root-1.5.3.zip

    Apache Shiro是一个强大的Java安全框架,它提供了身份验证、授权、加密和会话管理功能,使得开发者能够轻松处理应用程序的安全需求。"shiro-shiro-root-1.5.3.zip"是一个包含Apache Shiro 1.5.3版本所有依赖JAR包的...

    整合Apache Oltu 与 Shiro. 提供一个轻量的OAUTH2应用框架

    总之,整合Apache Oltu和Apache Shiro创建的轻量级OAUTH2应用框架,为Web应用和移动设备的安全提供了坚实的基础。通过合理的配置和扩展,开发者可以轻松地实现身份验证、授权和OAuth2的无缝集成,提高应用的安全性。

    SpringBoot与Shiro整合-权限管理实战-课堂笔记.docx

    【SpringBoot与Shiro整合-权限管理实战】的课程主要关注如何将Spring Boot与Apache Shiro框架结合起来,实现高效的安全管理。Spring Boot是Spring框架的一个简化版本,旨在提高开发效率,减少配置工作,同时提供了很...

    springboot-shiro认证系统框架--成型框架

    SpringBoot-Shiro 认证系统框架是一个成熟的解决方案,它整合了SpringBoot和Apache Shiro这两个强大的工具,旨在简化Web应用的安全管理。这个成型框架提供了一个完整的认证中心服务,支持分布式环境,非常适合在生产...

    Spring MVC+Mybatis+Ehcache+Apache Shiro+Bootstrap整合开发java仓库管理系统源码

    这是一个基于Java技术栈的仓库管理系统源码,使用了Spring MVC作为MVC框架,Mybatis作为持久层框架,Ehcache作为缓存管理工具,Apache Shiro进行权限控制,以及Bootstrap作为前端UI框架。下面将详细解析这些技术在...

    shiro-all-1.2.3.jar

    "shiro-all-1.2.3.jar" 是Apache Shiro框架的一个完整集合,包含了所有必要的类和库,用于在项目中集成Shiro的功能。 Shiro 的核心组件包括: 1. **身份验证(Authentication)**:这是确认用户身份的过程,即验证...

    shiro-web-master.zip

    总的来说,"shiro-web-master.zip"的学习资源涵盖了Shiro在Web开发中的核心应用,包括用户身份验证、授权策略、密码加密、Redis缓存的使用,以及如何在实际项目中整合这些功能。对于想要提升Web应用安全性的开发者来...

    shiro与spring web 项目集成.pdf

    Shiro与Spring Web的整合是一个将安全功能集成到Web应用的过程。通过配置ShiroFilter和相关组件,可以轻松地为Spring Web项目添加用户认证、授权和会话管理等安全特性。整合时需要注意Shiro与Spring的依赖关系、配置...

    shiro和web整合实例

    Apache Shiro 是一个强大且易用的 Java 安全框架,提供了认证、授权、加密和会话管理功能,可以非常方便地为 Web 应用提供安全支持。在本实例中,我们将探讨如何将 Shiro 整合到 Web 项目中,以实现全面的安全管理。...

    2.2 SpringBoot与Shiro整合-权限管理实战-课堂笔记.docx

    【SpringBoot与Shiro整合-权限管理实战】 在本文中,我们将探讨如何将Spring Boot与Apache Shiro框架整合,以实现高效且灵活的权限管理系统。首先,我们需要了解这两个框架的基本概念。 **Spring Boot框架简介** ...

    SpringBoot与Shiro整合-权限管理实战源码.zip

    在IT行业中,SpringBoot和Apache Shiro是两个非常重要的框架,它们在开发高效、安全的Web应用程序中扮演着核心角色。SpringBoot简化了Spring应用程序的配置和开发过程,而Shiro则是一个强大的安全管理框架,专注于...

Global site tag (gtag.js) - Google Analytics