转发地址: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. Django REST framework+Vue 打造生鲜电商项目(笔记八)

    (form:http://www.cnblogs.com/derek1184405959/p/8862569.html) 十一.pycharm 远程代码调试 第三方登录和支付,都需要有服务器才行(回调 ...

  2. SMT32 启动文件详细解说

    在开发STM32的时候,无论你试试用库开发还是使用寄存器来开发首先最重要的你必须的理解STM32的启动流程,启动流程封装在启动文件里面.而这个启动文件就是Bootloader.Cortex M3的内核 ...

  3. BZOJ2616 SPOJ PERIODNI(笛卡尔树 + DP)

    题意 N,K≤500,h[i]≤106N,K\le 500,h[i]\le10^6N,K≤500,h[i]≤106 题解 建立出小根堆性质的笛卡尔树,于是每个节点可以代表一个矩形,其宽度为子树大小,高 ...

  4. 有关求第n位xxx 的算法的问题

    最近,博客园上看到有关求 斐波那契数列的第n位是什么的问题.什么是 斐波那契数列? 我自己也忘记了,后来百度了下.http://baike.baidu.com/view/816.htm?fr=alad ...

  5. guava字符串工具 Splitter 主要功能是拆分字符串为集合 Map

    public class SplitterTest { public static void main(String args[]){ //1.拆分字符串为List集合 String str=&quo ...

  6. 学到了武沛齐讲的Day14完

    & 交 |   并 ^   并-交 --------------------- 格式化 %s  字符串,数字,一切 %.4s  留前面4位 %d 数字 %f   小数保留6位 四舍五入 %0. ...

  7. vue+上传文件夹

    在做项目开发的时候,上传东西无论文件也好,还是文件夹都需要用到 <input type="file" id="filepicker" name=" ...

  8. docker部署vue前端

    1.下载安装nginx image docker pull nginx:latest 2.准备将编译后的代码上传到主机上 3.编写dockerfile, nginx conf,并创建镜像 Docker ...

  9. ftp连接

    package enterprise.celerity.ac.util; import java.io.IOException;import java.io.InputStream;import ja ...

  10. springboot连接redis进行CRUD

    springboot连接redis进行CRUD: 1.添加以下依赖: <dependency> <groupId>org.springframework.boot</gr ...