Shiro提供了JSTL标签用于在JSP/GSP页面进行权限控制,如根据登录用户显示相应的页面按钮。

导入标签库

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

标签库定义在shiro-web.jar包下的META-INF/shiro.tld中定义。

guest标签

  1. <shiro:guest>
  2. 欢迎游客访问,<a href="${pageContext.request.contextPath}/login.jsp">登录</a>
  3. </shiro:guest>

用户没有身份验证时显示相应信息,即游客访问信息。

user标签

  1. <shiro:user>
  2. 欢迎[<shiro:principal/>]登录,<a href="${pageContext.request.contextPath}/logout">退出</a>
  3. </shiro:user>

用户已经身份验证/记住我登录后显示相应的信息。

authenticated标签

  1. <shiro:authenticated>
  2. 用户[<shiro:principal/>]已身份验证通过
  3. </shiro:authenticated>

用户已经身份验证通过,即Subject.login登录成功,不是记住我登录的。

notAuthenticated标签

<shiro:notAuthenticated>
未身份验证(包括记住我)
</shiro:notAuthenticated> 

用户已经身份验证通过,即没有调用Subject.login进行登录,包括记住我自动登录的也属于未进行身份验证。

principal标签

<shiro: principal/>

显示用户身份信息,默认调用Subject.getPrincipal()获取,即Primary Principal。

  1. <shiro:principal type="java.lang.String"/>

相当于Subject.getPrincipals().oneByType(String.class)。

  1. <shiro:principal type="java.lang.String"/>

相当于Subject.getPrincipals().oneByType(String.class)。

  1. <shiro:principal property="username"/>

相当于((User)Subject.getPrincipals()).getUsername()。

hasRole标签

  1. <shiro:hasRole name="admin">
  2. 用户[<shiro:principal/>]拥有角色admin<br/>
  3. </shiro:hasRole>

如果当前Subject有角色将显示body体内容。

hasAnyRoles标签

  1. <shiro:hasAnyRoles name="admin,user">
  2. 用户[<shiro:principal/>]拥有角色admin或user<br/>
  3. </shiro:hasAnyRoles>

如果当前Subject有任意一个角色(或的关系)将显示body体内容。

lacksRole标签

  1. <shiro:lacksRole name="abc">
  2. 用户[<shiro:principal/>]没有角色abc<br/>
  3. </shiro:lacksRole>

如果当前Subject没有角色将显示body体内容。

hasPermission标签

  1. <shiro:hasPermission name="user:create">
  2. 用户[<shiro:principal/>]拥有权限user:create<br/>
  3. </shiro:hasPermission>

如果当前Subject有权限将显示body体内容。

lacksPermission标签

  1. <shiro:lacksPermission name="org:create">
  2. 用户[<shiro:principal/>]没有权限org:create<br/>
  3. </shiro:lacksPermission>

如果当前Subject没有权限将显示body体内容。

另外又提供了几个权限控制相关的标签:

导入自定义标签库

  1. <%@taglib prefix="zhang" tagdir="/WEB-INF/tags" %>

示例

  1. <zhang:hasAllRoles name="admin,user">
  2. 用户[<shiro:principal/>]拥有角色admin和user<br/>
  3. </zhang:hasAllRoles>
  4. <zhang:hasAllPermissions name="user:create,user:update">
  5. 用户[<shiro:principal/>]拥有权限user:create和user:update<br/>
  6. </zhang:hasAllPermissions>
  7. <zhang:hasAnyPermissions name="user:create,abc:update">
  8. 用户[<shiro:principal/>]拥有权限user:create或abc:update<br/>
  9. </zhang:hasAnyPermissions>

hasAllRoles表示拥有所有相关的角色;hasAllPermissions表示拥有所有相关的权限;hasAnyPermissions表示拥有任意一个相关的权限。

另外可以参考我的《简单shiro扩展实现NOT、AND、OR权限验证》实现NOT、AND、OR权限验证:http://jinnianshilongnian.iteye.com/blog/1864800

shiro中JSP标签的更多相关文章

  1. (二)shiro之jsp标签

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

  2. JavaWeb学习之JSP(二) JSP标签

    JSP常用标签 什么是JSP标签 JSP标签,有的地方也叫做JSP动作,在JSP中编写大量的java代码会使JSP页面显得杂乱无章,看起来非常不舒服,因此JSP提供了一些类似html的标签,通过这些标 ...

  3. Shiro第五篇【授权过滤、注解、JSP标签方式、与ehcache整合】

    授权过滤器测试 我们的授权过滤器使用的是permissionsAuthorizationFilter来进行拦截.我们可以在application-shiro中配置filter规则 <!--商品查 ...

  4. Spring+shiro配置JSP权限标签+角色标签+缓存

    Spring+shiro,让shiro管理所有权限,特别是实现jsp页面中的权限点标签,每次打开页面需要读取数据库看权限,这样的方式对数据库压力太大,使用缓存就能极大减少数据库访问量. 下面记录下sh ...

  5. shiro:10个过滤器;10个jsp标签;5个@注解

    10个过滤器 过滤器简称 对应的java类 anon org.apache.shiro.web.filter.authc.AnonymousFilter authc org.apache.shiro. ...

  6. jsp2.0+中的标签文件,JSP Fragment技术

    刚进新公司不久,今天在看到项目中用到了.tag文件.刚开始我还以为这个是第三方类似freemarker的模板技术.问了下项目组的其他人员,原来这是jsp2.0以来就有的JSP Fragment技术.以 ...

  7. JSP中<img>标签引用本地图片

    问题描述: jsp页面中<img>标签如何读取本地文件夹中的图片. 问题起因: 由于上传图片至本地文件夹中,图片路径为: D:/upload/file/image/img.jpg 所以将这 ...

  8. JSP内置标签 JSP中JavaBean标签 JSP开发模式 EL和JSTL快速入门

    2 JSP内置标签(美化+业务逻辑)   1)为了取代<%%>脚本形式,使用JSP标签/JSP动作,目的:与JSP页面的美化,即JSP面页都是由标签组成,不再有其它的内容   2)JSP内 ...

  9. [置顶] jsp中c标签的使用

    jsp中c标签的使用 核心标签库 它是JSTL中的核心库,为日常任务提供通用支持,如显示和设置变量.重复使用一组项目.测试条件和其他操作(如导入和重定向Web内容).Core标签按功能可分为4种类型: ...

随机推荐

  1. 【教程】Git在Eclipse中的安装和基本使用

    一.安装 点击 Help->Install New Software->add 安装地址为:http://download.eclipse.org/egit/updates/ 选择插件   ...

  2. AtCoder Beginner Contest 117 解题报告

    果然abc都是手速场. 倒序开的qwq. D题因为忘记1e12二进制几位上界爆了一发. A - Entrance Examination 就是除一下就行了... 看样例猜题意系列. #include& ...

  3. [午间休息] - 午间codewars活跃脑袋

    https://www.codewars.com/kata/51f2b4448cadf20ed0000386/javascript 中午是一个易困的时间段.如果其它人不睡觉还好. 这个js题目就是说如 ...

  4. LightOJ 1268 Unlucky Strings(KMP+矩阵乘法+基础DP)

    题意 给出字符串的长度 \(n\) ,以及该字符串是由哪些小写字母组成,现给出一个坏串 \(S\) ,求存在多少种不同的字符串,使得其子串不含坏串. \(1 \leq n \leq 10^9\) \( ...

  5. Latex: IEEEtrans模板下 扩大标题宽度

    参考: Extending side margins for Title section in IEEEtrans document class Latex: IEEEtrans模板下 扩大标题宽度 ...

  6. Ubuntu14.04 clang3.8 Installation Guide

    Reference Installing clang 3.8 on Ubuntu 14.04.3. Ubuntu14.04 clang3.8 Installation Guide 1.add the ...

  7. 常用模块(json/pickle/shelve/XML)

    一.json模块(重点) 一种跨平台的数据格式 也属于序列化的一种方式 介绍模块之前,三个问题: 序列化是什么? 我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化. 反序列化又是什么? 将 ...

  8. 使用axios实现上传视频进度条

    这是最终的效果图 先介绍一下axios的使用:中文的axios官方介绍 首先定义一个uploadTest方法,写在vue文件的methods里 该方法有三个参数,分别是参数,和两个回调函数,参数就是我 ...

  9. 【Java】【存储&作用域】

    [存储] 1. 寄存器.这是最快的保存群裕,因为它位于和其他所有保存方式不同的地方:处理器内部.然而,寄存器的数量有限,所以寄存器是根据需要由编译器分配.我们对此没有直接的控制权,也不可能在自己的程序 ...

  10. 【MySQL】【一】shell

    进入MySQL:mysql -u root -p 查看当前数据库下所有库:mysql> show databases; 切换到某库:mysql> use sys; 查看sys库下所有表:m ...