转发地址:https://www.iteye.com/blog/jinnianshilongnian-2026398

博客分类:

目录贴:跟我学Shiro目录贴

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。

示例源代码:https://github.com/zhangkaitao/shiro-example;可加群 231889722 探讨Spring/Shiro技术。

第九章 JSP标签——《跟我学Shiro》的更多相关文章

  1. 第十四章 SSL——《跟我学Shiro》

    目录贴:跟我学Shiro目录贴 对于SSL的支持,Shiro只是判断当前url是否需要SSL登录,如果需要自动重定向到https进行访问. 首先生成数字证书,生成证书到D:\localhost.key ...

  2. 第三章 授权——《跟我学Shiro》

    转发地址:https://www.iteye.com/blog/jinnianshilongnian-2020017 目录贴:跟我学Shiro目录贴 授权,也叫访问控制,即在应用中控制谁能访问哪些资源 ...

  3. 第十三章 RememberMe——《跟我学Shiro》

    转发地址:https://www.iteye.com/blog/jinnianshilongnian-2031823 目录贴:跟我学Shiro目录贴 Shiro提供了记住我(RememberMe)的功 ...

  4. 《跟我学shiro》

    张开涛<跟我学shiro>博客系列: Shiro目录 第一章  Shiro简介 第二章  身份验证 第三章  授权 第四章  INI配置 第五章  编码/加密 第六章  Realm及相关对 ...

  5. 跟我学Shiro目录贴

    转发地址:https://www.iteye.com/blog/jinnianshilongnian-2018398 扫一扫,关注我的公众号 购买地址 历经三个月左右时间,<跟我学Shiro&g ...

  6. 跟开涛老师学shiro -- 授权

    授权,也叫访问控制,即在应用中控制谁能访问哪些资源(如访问页面/编辑数据/页面操作等).在授权中需了解的几个关键对象:主体(Subject).资源(Resource).权限(Permission).角 ...

  7. 十六章 综合实例——《跟我学Shiro》

    目录贴:跟我学Shiro目录贴 简单的实体关系图 简单数据字典 用户(sys_user) 名称 类型 长度 描述 id bigint 编号 主键 username varchar 100 用户名 pa ...

  8. 第二十二章 集成验证码——《跟我学Shiro》

    目录贴:跟我学Shiro目录贴 在做用户登录功能时,很多时候都需要验证码支持,验证码的目的是为了防止机器人模拟真实用户登录而恶意访问,如暴力破解用户密码/恶意评论等.目前也有一些验证码比较简单,通过一 ...

  9. 第十九章 动态URL权限控制——《跟我学Shiro》

    目录贴:跟我学Shiro目录贴 用过Spring Security的朋友应该比较熟悉对URL进行全局的权限控制,即访问URL时进行权限匹配:如果没有权限直接跳到相应的错误页面.Shiro也支持类似的机 ...

随机推荐

  1. vue2 父链,子组件索引及父子通信的props对象写法

  2. python - Flask 基础 - 蓝图( Blueprint )(2)

    """ 蓝图:为开发者提供的目录结构 - 使用: 1. 根目录创建一个跟项目名一样的文件 - 创建后第一步,在这个文件夹中添加一个 __init__.py 的配置文件 - ...

  3. [Dart] Dynamic variable in Dart

    First way to create dynamic variable is using 'dymaic' keywrod: dynamic a = 123; a = '123'; Second w ...

  4. 服务器nginx部署PHP项目样式不出来要注意的小问题

    服务器使用nginx部署PHP项目的时候如果样式没有 出来,那么很可能 location 块里出问题了. 比如 location / { root /home/wwwroot/default/php_ ...

  5. AcWing P164 可达性统计 题解

    Analysis 这道题我一开始想到的是传递闭包,但是时间复杂度是n³,也开不下30000*30000的数组,所以我想到了拓扑+状态压缩(bitset),从后往前找,把能到达的点能到哪里用位运算赋到上 ...

  6. 内存原理与PHP的执行过程

    一.内存结构 栈区:保存的是变量名(术语:引用),对于cpu来说,读写速度很快 堆区:存储“复杂”的数据,数组.对象.字符串(字符串比较特殊)等 数据段:又分为数据段全局区(用于存储简单的数据,如数字 ...

  7. 块状链表 codevs 2333弹飞绵羊

    块状链表,分块处理,先预处理每一个点跳到下一个块 跳到哪,步数.然后修改的时候,修该那一个块即可 #include<cstdio>#include<cmath>int a[20 ...

  8. Gluon学习03-基础数据类型Ndarray

    Gluon学习03-基础数据类型Ndarray 小书匠 kindle  目录,方便快速定位: 1.安装cuda与cudnn 2.安装mxnet-gpu 本机环境介绍: 系统:Linuxmint Pyt ...

  9. python threading多线程

    import threading import time def print_time(threadName, delay, iterations): start = int(time.time()) ...

  10. 区间最值问题(RMQ)

    题目描述 给出N个数,求第a个数到第b个数之间最大的数减去最小的数的结果 程序输入说明 N(N小于100,000),M(M小于100,000)接下来有N个数接下来M组范围,所有数均在[0,231-1] ...