shiro   的简单应用

shiro官网:https://shiro.apache.org/

shiro 简介:

Apache Shiro(日语"堡垒(Castle)"的意思)是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理功能,可为任何应用提供安全保障 - 从命令行应用、移动应用到大型网络及企业应用。

Shiro为解决下列问题(我喜欢称它们为应用安全的四要素)提供了保护应用的API:

认证 - 用户身份识别,常被称为用户"登录";

授权 - 访问控制;

密码加密 - 保护或隐藏数据防止被偷窥;

会话管理 - 每用户相关的时间敏感的状态。

Shiro还支持一些辅助特性,如Web应用安全、单元测试和多线程,它们的存在强化了上面提到的四个要素。

项目应用:

controller层

@RequiresPermissions("periodical:periodical:view")

@RequiresPermissions("periodical:periodical:edit")

jsp页面:

  1. <li class="active"><a href="${ctx}/periodical_resource/periodicalResource/form?id=${periodicalResource.id}">期刊内容
  2.     <shiro:hasPermission name="periodical_resource:periodicalResource:edit">${not empty periodicalResource.id?'修改':'添加'}</shiro:hasPermission>
  3.     <shiro:lacksPermission name="periodical_resource:periodicalResource:edit">修改</shiro:lacksPermission>
        </a>
      </li>
  1. shiro jsp 标签
  2.  
  3. 一、授权的三要素
  4.  
  5. 授权有着三个核心元素:权限、角色和用户。
  6.  
  7. 权限
  8. 权限是Apache Shiro安全机制最核心的元素。它在应用程序中明确声明了被允许的行为和表现。一个格式良好好的权限声明可以清晰表达出用户对该资源拥有的权限。
  9. 大多数的资源会支持典型的CRUD操作(create,read,update,delete),但是任何操作建立在特定的资源上才是有意义的。因此,权限声明的根本思想就是建立在资源以及操作上。
  10. 而我们通过权限声明仅仅能了解这个权限可以在应用程序中做些什么,而不能确定谁拥有此权限。
  11. 于是,我们就需要在应用程序中对用户和权限建立关联。
  12. 通常的做法就是将权限分配给某个角色,然后将这个角色关联一个或多个用户。
  13.  
  14. 权限声明及粒度
  15. Shiro权限声明通常是使用以冒号分隔的表达式。就像前文所讲,一个权限表达式可以清晰的指定资源类型,允许的操作,可访问的数据。同时,Shiro权限表达式支持简单的通配符,可以更加灵活的进行权限设置。
  16. 下面以实例来说明权限表达式。
  17. 可查询用户数据
  18. User:view
  19. 可查询或编辑用户数据
  20. User:view,edit
  21. 可对用户数据进行所有操作
  22. User:* user
  23. 可编辑id123的用户数据
  24. User:edit:123
  25.  
  26. 角色
  27. Shiro支持两种角色模式:
  28. 1、传统角色:一个角色代表着一系列的操作,当需要对某一操作进行授权验证时,只需判断是否是该角色即可。这种角色权限相对简单、模糊,不利于扩展。
  29. 2、权限角色:一个角色拥有一个权限的集合。授权验证时,需要判断当前角色是否拥有该权限。这种角色权限可以对该角色进行详细的权限描述,适合更复杂的权限设计。
  30. 下面将 详细描述对两种角色模式的授权实现。
  31.  
  32. 二、授权实现
  33.  
  34. Shiro支持三种方式实现授权过程:
  35. 编码实现
  36. 注解实现
  37. JSP Taglig实现
  38.  
  39. jsp页面:
  40. shiro:hasRole name="ROLE_ADMIN">
  41. <li class="user"><a href="${ctx}/admin/user">用户</a></li>
  42. </shiro:hasRole>
  43. <shiro:hasAnyRoles name="ROLE_ADMIN,ROLE_SERVICE">
  44. <li class="complaint"><a href="${ctx}/admin/complaint/list">服务</a></li>
  45. </shiro:hasAnyRoles>
  46. <shiro:hasRole name="ROLE_ADMIN">
  47. <li class="system"><a href="${dmin/repairType/indexctx}/a">系统设置</a></li>
  48. </shiro:hasRole>
  49.  
  50. 1、介绍Shiro的标签guest标签 :验证当前用户是否为“访客”,即未认证(包含未记住)的用户。
  51. <shiro:guest>
  52. Hi there! Please <a href="login.jsp">Login</a> or <a href="signup.jsp">Signup</a> today!
  53. </shiro:guest>
  54. 2user标签 :认证通过或已记住的用户。
  55. <shiro:user>
  56. Welcome back John! Not John? Click <a href="login.jsp">here<a> to login.
  57. </shiro:user>
  58. 3authenticated标签 :已认证通过的用户。不包含已记住的用户,这是与user标签的区别所在。
  59. <shiro:authenticated>
  60. <a href="updateAccount.jsp">Update your contact information</a>.
  61. </shiro:authenticated>
  62. 4notAuthenticated标签 :未认证通过用户,与authenticated标签相对应。与guest标签的区别 是,该标签包含已记住用户。
  63. <shiro:notAuthenticated>
  64. Please <a href="login.jsp">login</a> in order to update your credit card information.
  65. </shiro:notAuthenticated>
  66. 5principal 标签 :输出当前用户信息,通常为登录帐号信息。
  67. Hello, <shiro:principal/>, how are you today?
  68. 6hasRole标签 :验证当前用户是否属于该角色。
  69. <shiro:hasRole name="administrator">
  70. <a href="admin.jsp">Administer the system</a>
  71. </shiro:hasRole>
  72. 7lacksRole标签 :与hasRole标签逻辑相反,当用户不属于该角色时验证通过。
  73. <shiro:lacksRole name="administrator">
  74. Sorry, you are not allowed to administer the system.
  75. </shiro:lacksRole>
  76. 8hasAnyRole标签 :验证当前用户是否属于以下任意一个角色。
  77. <shiro:hasAnyRoles name="developer, project manager, administrator">
  78. You are either a developer, project manager, or administrator.
  79. </shiro:lacksRole>
  80. 9hasPermission标签 :验证当前用户是否拥有指定权限。
  81. <shiro:hasPermission name="user:create">
  82. <a href="createUser.jsp">Create a new User</a>
  83. </shiro:hasPermission>
  84. 10lacksPermission标签 :与hasPermission标签逻辑相反,当前用户没有制定权限时,验证通 过。
  85. <shiro:hasPermission name="user:create">
  86. <a href="createUser.jsp">Create a new User</a>
  87. </shiro:hasPermission>
  88.  
  89. controller层的shiro 注解使用
  90. @RequiresPermissions("account:create")
  91. public void createAccount(Account account) {
  92. //this method will only be invoked by a Subject
  93. //that is permitted to create an account
  94. ...
  95. }
  1.  

shiro 的简单应用的更多相关文章

  1. Maven+Spring+Hibernate+Shiro+Mysql简单的demo框架(二)

    然后是项目下的文件:完整的项目请看  上一篇 Maven+Spring+Hibernate+Shiro+Mysql简单的demo框架(一) 项目下的springmvc-servlet.xml配置文件: ...

  2. Apache shiro的简单介绍与使用(与spring整合使用)

    apache shiro框架简介 Apache Shiro是一个强大而灵活的开源安全框架,它能够干净利落地处理身份认证,授权,企业会话管理和加密.现在,使用Apache Shiro的人越来越多,因为它 ...

  3. 基于Spring Aop实现类似shiro的简单权限校验功能

    在我们的web开发过程中,经常需要用到功能权限校验,验证用户是否有某个角色或者权限,目前有很多框架,如Shiro Shiro有基于自定义登录界面的版本,也有基于CAS登录的版本,目前我们的系统是基于C ...

  4. shiro的简单入门使用

    这里只是测试登录认证,没有web模块,没有连接数据库,用户密码放在shiro.ini配置中,密码没有加密处理,简单入门. 基于maven 先看目录结构 测试结果 pom.xml <?xml ve ...

  5. Apache shiro的简单介绍与使用(与spring整合使用,并加入ehcache缓存权限数据)

    apache shiro框架简介 Apache Shiro是一个强大而灵活的开源安全框架,它能够干净利落地处理身份认证,授权,企业会话管理和加密.现在,使用Apache Shiro的人越来越多,因为它 ...

  6. JavaWeb项目:Shiro实现简单的权限控制(整合SSM)

    该demo整合Shiro的相关配置参考开涛的博客 数据库表格相关设计  表格设计得比较简单,导航栏直接由角色表auth_role的角色描述vRoleDesc(父结点)和角色相关权限中的权限描述(标记为 ...

  7. shiro的简单使用

    <?xml version="1.0" encoding="utf-8"?> <web-app xmlns:xsi="http:// ...

  8. Maven+Spring+Hibernate+Shiro+Mysql简单的demo框架(一)

    相关的maven的 pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="ht ...

  9. Shiro 系列: 简单命令行程序示例

    在本示例中, 使用 INI 文件来定义用户和角色. 首先学习一下 INI 文件的规范. =======================Shiro INI 的基本规范================== ...

随机推荐

  1. Ok6410挂载NFS

    虚拟机: apt-get install portmap apt-get install  nfs-kernel-server mkdir   /nfs/root/mNFS chmod 777 /nf ...

  2. C#操作JSON专题

    第一章:C#如何拿到从http上返回JSON数据? 第二章:C#如何解析JSON数据?(反序列化对象) 第三章:C#如何生成JSON字符串?(序列化对象) 第四章:C#如何生成JSON字符串提交给接口 ...

  3. eclipse中maven的配置与使用

    以eclipse Juno版本为例 1.插件安装 eclipse==>help====>install new software===>add name :m2e location: ...

  4. hive like 模糊匹配

    类似: 在MYSQL里面我们可以这样的执行SQL select a.Community,a.PID,b.spidertime,b.comm,b.showings,b.room from lianjia ...

  5. Java更新

    Java I/O 总结 JVM(8):JVM知识点总览-高级Java工程师面试必备 细数JDK里的设计模式 Java中创建对象的5种不同方法 关于Java Collections的几个常见问题 类在什 ...

  6. matlab读取excel

    xlsread函数: x = xlsread('d:/min1.csv','B2:B10');    %文件名和路径:所读取的数据范围:

  7. ROS探索总结(一)——ROS简介

    转自古-月 ROS探索总结(一)——ROS简介 一.历史 随着机器人领域的快速发展和复杂化,代码的复用性和模块化的需求原来越强烈,而已有的开源机器人系统又不能很好的适应需求.2010年Willow G ...

  8. ReactNative安装配置

    1.安装jdk1.8,配置好path, javac,java -version 2.安装设置Android sdk a. 解压:D:\www\sdk\adt-bundle-windows-x86_64 ...

  9. 理解JSON的语法

    JSON语法可以分为三种类型: 简单值 对象 数组 简单值: 5 "Hello World" JavaScript字符串与JSON字符串的最大区别在于,JSON字符串必须使用双引号 ...

  10. ubuntu基础知识与技巧

    root用户与超级用户的切换 (1)  sudo -i (2)  sudo su (3)  su root 安装升级 查看软件xxx安装内容 dpkg -L xxx 查找软件库中的软件 apt-cac ...