ApacheShiro提供了一个JSP/GSP标签库,它允许你控制你的JSP,JSTL或GSP页面基于当前Subject的状态进行输出。这对于根据用户身份和当前用户的授权状态来提供个性化视图是相当有用的。
标签库的描述文件(TLD)保存在shiro-web.jar里的META-INF/shiro.tld文件。要使用任何标签,需要在你JSP页面(或任何你定义的页面指令)的顶部添加下面一行:
<%@taglibprefix="shiro"uri="http://shiro.apache.org/tags"%>
|
我们使用shiro前缀用以表明shiro标签库命名空间,当然你可以指定任何你喜欢的名字。
下面将分别介绍每一个标签,并展示它是如何用来渲染页面的。
Theguesttag
guest标签将显示它包含的内容,仅当当前的Subject被认为是'guest'时。'guest'是指没有身份ID的任何Subject。也就是说,我们并不知道用户是谁,因为他们没有登录并且他们没有在上一次的访问中被记住(RememberMe服务)。例如:
<shiro:guest>
Hithere!Please<ahref="login.jsp">Login</a>or<ahref="signup.jsp">Signup</a>today!
</shiro:guest>
|
guest标签与user标签逻辑相反。
Theusertag
user标签将显示它包含的内容,仅当当前的Subject被认为是'user'时。'user'在上下文中被定义为一个已知身份ID的Subject,或是成功通过身份验证及通过'RememberMe'服务的。请注意这个标签在语义上与authenticated标签是不同的,authenticated标签更为严格。例如:
<shiro:user>
WelcomebackJohn!NotJohn?Click<ahref="login.jsp">here<a>tologin.
</shiro:user>
|
usre标签与guest标签逻辑相反。
Theauthenticatedtag
仅仅只当当前用户在当前会话中成功地通过了身份验证authenticated标签才会显示包含的内容。它比'user'标签更为严格。它在逻辑上与'notAuthenticated'标签相反。
authenticated标签只有当当前Subject在其当前的会话中成功地通过了身份验证才会显示包含的内容。它比user标签更为严格,authenticated标签通常在敏感的工作流中用来确保身份ID是可靠的。例如:
<shiro:authenticated>
<ahref="updateAccount.jsp">Updateyourcontactinformation</a>.
</shiro:authenticated>
|
authenticated标签与notAuthenticated标签逻辑相反。
ThenotAuthenticatedtag
notAuthenticated标签将会显示它所包含的内容,如果当前Subject还没有在其当前会话中成功地通过验证。例如:
<shiro:notAuthenticated>
Please<ahref="login.jsp">login</a>inordertoupdateyourcreditcardinformation.
</shiro:notAuthenticated>
|
notAuthenticated标签与Authenticated标签逻辑相反。
Theprincipaltag
principal标签将会输出Subject的主体(标识属性)或主要的属性。
若没有任何标签属性,则标签将使用principal的toString()值来呈现页面。例如(假设principal是一个字符串的用户名):
Hello,<shiro:principal/>,howareyoutoday?
|
这一般等价于下面:
Hello,<%=SecurityUtils.getSubject().getPrincipal().toString()%>,howareyoutoday?
|
principal标签默认情况下,假定该principal输出的是subject.getPrincipal()的值。但若你想输出一个不是主要principal的值,而是属于另一个Subject的principalcollection,你可以通过类型来获取该principal并输出该值。
例如,输出Subject的用户ID(并不是username),假设该ID属于principalcollection:
UserID:<principaltype="java.lang.Integer"/>
|
这一般等价于下面:
UserID:<%=SecurityUtils.getSubject().getPrincipals().oneByType(Integer.class).toString()%>
|
但如果该principal是一个复杂的对象而不是一个简单的字符串,而且你希望引用该principal上的一个属性该怎么办呢?你可以使用property属性来来表示property的名称来理解(必须通过JavaBeans兼容的getter方法访问)。例如(假设principal是一个User对象):
Hello,<shiro:principalproperty="firstName"/>,howareyoutoday?
|
这一般等价于下面:
Hello,<%=SecurityUtils.getSubject().getPrincipal().getFirstName().toString()%>,howareyoutoday?
|
如果结合属性类型如下:
Hello,<shiro:principaltype="com.foo.User"property="firstName"/>,howareyoutoday?
|
这一般等价于下面:
Hello,<%=SecurityUtils.getSubject().getPrincipals.oneByType(com.foo.User.class).getFirstName().toString()%>,howareyoutoday?
|
ThehasRoletag
hasRole标签将会显示它所包含的内容,仅当当前Subject被分配了具体的角色。例如:
<shiro:hasRolename="administrator">
<ahref="admin.jsp">Administerthesystem</a>
</shiro:hasRole>
|
hasRole标签与lacksRole标签逻辑相反。
ThelacksRoletag
lacksRole标签将会显示它所包含的内容,仅当当前Subject未被分配具体的角色。例如:
<shiro:lacksRolename="administrator">
Sorry,youarenotallowedtoadministerthesystem.
</shiro:lacksRole>
|
lacksRole标签与hasRole标签逻辑相反。
ThehasAnyRoletag
hasAnyRole标签将会显示它所包含的内容,如果当前的Subject被分配了任意一个来自于逗号分隔的角色名列表中的具体角色。例如:
<shiro:hasAnyRolename="developer,projectmanager,administrator">
Youareeitheradeveloper,projectmanager,oradministrater.
</shiro:hasAnyRole>
|
hasAnyRole标签目前还没有与之逻辑相反的标签。
ThehasPermissiontag
hasPermission标签将会显示它所包含的内容,仅当当前Subject“拥有”(蕴含)特定的权限。也就是说,用户具有特定的能力。例如:
<shiro:hasPermissionname="user:create">
<ahref="createUser.jsp">CreateanewUser</a>
</shiro:hasPermission>
|
hasPermission标签与lacksPermission标签逻辑相反。
ThelacksPermissiontag
lacksPermission标签将会显示它所包含的内容,仅当当前Subject没有拥有(蕴含)特定的权限。也就是说,用户没有特定的能力。例如:
<shiro:lacksPermissionname="user:delete">
Sorry,youarenotallowedtodeleteduseraccounts.
</shiro:hasPermission>
|
lacksPermission标签与hasPermission标签逻辑相反。
分享到:
相关推荐
4、优点:快速上手、全面支持验证、授权、加密和会话、灵活自定义设计、支持web环境、可以无缝集成spring等优点。可以用来用户验证、用户授权、用户session管理、安全加密等 5、基于RBAC五张表:用户表 tb_user、...
包含shirojar包和整合配置官方例子说明,以及jar包。 Apache Shiro是一个强大且易用的Java安全框架...使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。
) JBoss RestEasy 3.0.9.Final ( ) Guice 3.0 ( ) Apache Shiro 1.2.3 ( ) gson 2.2.4 ( ) 乔达时间 2.4 ( ) JUnit 4.10 ( ) Jukito 1.4 ( ) Logback + SLF4J XLogger ( )要求Java 8 Maven 3 应用服务器(Tomcat 9(?...
整合Apache Oltu 与 Shiro. 提供一个轻量的OAUTH2应用框架。并根据不同的应用场景提供不同的实现(如web场景,移动设备).
1、Shiro是Apache下的一个开源项目,我们称之为Apache Shiro。它是一个很易用与Java项目的的安全框架,提供了认证、授权、加密、会话管理,与spring Security 一样都是做一个权限的安全框架,但是与Spring Security ...
SpringMVC整合Shiro,Shiro是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能。 配置applicationContext-shiro.xml 1. 配置authorizingRealm ...
apache shiro 是一个安全认证框架,和 spring security 相比,在于他使用了比较简洁易懂的认证和授权方式。其提供的 native-session(即把用户认证后的授权信息保存在其自身提供Session 中)机制,这样就可以和 ...
整合Apache Oltu 与 Shiro. 提供一个轻量的OAUTH2应用框架实现.并根据不同的应用场景提供不同的实现(如web场景,移动设备).该项目与spring-oauth-server实现相同的需求与场合. 只是在实现上使用的技术不同(spring-...
shiro和struts2的简单整合的项目 包含,用户登录,shiro关联的tag标签的简单使用,
- Spring Boot 权限认证,包括 Apache Shiro、Spring Security - springboot-cloud - Spring Cloud 入门,包括 Eureka(服务注册与发现)、Config(配置中心)、Hystrix(断路器)、Bus(消息总线) 等
bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> 02 03 <!-- override these for application-specific URLs if you like:--> 04 <!-- ...
JeeSite是在Spring Framework基础上搭建的一个Java基础开发平台,以Spring MVC为模型视图控制器,MyBatis为数据访问层, Apache Shiro为权限授权层,Ehcahe对常用数据进行缓存,Activit为工作流引擎。是JavaEE界的...
1. 了解基于资源的权限管理方式 2. 权限数据模型 3. 基于url的权限管理(不适应shiro实现权限管理) 4. Shiro实现用户认证 5. Shiro实现用户授权 6. Shiro与企业web整合开发方法
为了增强应用程序的安全性,通常会结合使用Apache Shiro,这是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理等功能。通过整合SSM框架和Shiro,可以实现对应用程序的简单权限控制。 在`src/main/...
Aurora是一个简单高效的后台管理系统。...安全框架采用时下流行的Apache Shiro,可实现对按钮级别的权限控制;前端页面使用KidAdmin构建,并提供多套配色以供选择。 项目地址:https://gitee.com/hgpt/Aurora
非常完美的spring+springMVC+shiro 完美...简介: Shiro 是一个 Apache Incubator 项目,旨在简化身份验证和授权。是一个很不错的安全框架。 下面记录一下shiro和Spring整合的过程的一个小示例: Web.xml配置 ......
org.apache.shiro shiro-spring 1.4.0 org.apache.shiro shiro-ehcache 1.4.0 更新日期2017-11-07 1、项目整合redis存储,shiro可使用redisSession可使用于集群访问. 2、项目增加jwt模式 3、增加默认启动模式为开发...
shiro学习案例整合ssm shiwuzhaoling demo Spring Boot Examples 纯洁的微笑springboot学习demo Douyin-Bot Python 抖音机器人,论如何在抖音上找到漂亮小姐姐? MeiWidgetView 安卓自定义控件 Layx 网页弹框js插件 ...
而且 Shiro 兴起的时代主流应用还是传统的基于 Session 的 Web 网站,并没有过多的考虑目前流行的微服务等应用形式的权限管理需求。导致其并没有提供一套无状态微服务的开箱即用的整合方案。需要在项目层面对 Shiro ...
Apache Shiro | 安全框架 | [http://shiro.apache.org/](http://shiro.apache.org/) Spring session | 分布式Session管理 | [http://projects.spring.io/spring-session/]...