1 简介

授权,也叫访问控制,即在应用中控制谁能访问哪些资源(如访问页面/编辑数据/页面操作等)

在授权中需了解的几个关键对象:主体(Subject)、资源(Resource)、权限(Permission)、角色(Role)

1.1 主体

即访问应用的用户,在Shiro中使用Subject代表用户

用户只有授权后才允许访问相应的资源

1.2 资源

在应用中用户可以访问的任何东西,比如访问JSP页面、查看/编辑某些数据、访问某个业务方法、打印文本等等都是资源

用户只有授权后才能访问

1.3 权限

安全策略中的原子授权单位,通过权限我们可以表示在应用中用户有没有操作某个资源的权力。即权限表示在应用中用户能不能访问某个资源,如:访问用户列表页面

查看/新增/修改/删除用户数据(即很多时候都是CRUD(增查改删)式权限控制)

打印文档等

权限代表了用户有没有操作某个资源的权利,即反映在某个资源上的操作允不允许,不反映谁去执行这个操作

所以后续还需要把权限赋予特定用户,即定义哪个用户允许在某个资源上做什么操作(权限),Shiro不会去做这件事情,而是由实现人员提供

Shiro支持粗粒度权限(如用户模块的所有权限)和细粒度权限(操作某个用户的权限,即实例级别的)

1.4 角色

角色代表了操作集合,可以理解为权限的集合,一般情况下我们会赋予用户角色而不是权限

这样用户可以拥有一组权限,赋予权限时比较方便

典型的如:PM、CTO、SE等都是角色,不同的角色拥有一组不同的权限

1.4.1 隐式角色

直接通过角色来验证用户有没有操作权限

如在应用中CTO、SE可以使用打印机,假设某天不允许SE使用打印机,此时需要从应用中删除相应代码

即粒度是以角色为单位进行访问控制的,粒度较粗

如果进行修改可能造成多处代码修改。

1.4.2 显示角色

在程序中通过权限控制谁能访问某个资源,角色聚合一组权限集合

这样假设哪个角色不能访问某个资源,只需要从角色代表的权限集合中移除即可

无须修改多处代码;即粒度是以资源/实例为单位的;粒度较细

2 授权方式

Shiro支持三种方式的授权:

2.1 编程式:通过写if/else授权代码块完成:

2.2 注解式:通过在执行的Java方法上放置相应的注解完成

没有权限将抛出相应的异常;

JSP/GSP标签:在JSP/GSP页面通过相应的标签完成:

Java代码 [

收藏代码

](javascript:void() "收藏这段代码")

后续部分将详细介绍如何使用。

作者:芥末无疆sss

链接:https://www.jianshu.com/p/b156a7077fec

來源:简书

简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

java 2 %3c%3c 3_Shiro 实战(二)-授权相关推荐

  1. java爬取网页数据_Python网络爬虫实战(二)数据解析

    Python网络爬虫实战 (二)数据解析 本系列从零开始阐述如何编写Python网络爬虫,以及网络爬虫中容易遇到的问题,比如具有反爬,加密的网站,还有爬虫拿不到数据,以及登录验证等问题,会伴随大量网站 ...

  2. Java零基础入门:实战教程(二)

    博主简介: 博客主页:Java知识分享博主 Java零基础入门专栏:Java零基础入门专栏 Java交流社区:飞鸟社区 欢迎阅读,如果文章对你有帮助点赞,支持一下! 推荐阅读 Java零基础入门:概论 ...

  3. java的 %3c%3c 运算符_scanf(%3c%3c, a, b)

    问题 在书中看到这样的描述: 我们按照这个来操作一下: 代码 #include int main(int argc, char const *argv[]) { char a, b; scanf(&q ...

  4. Quarkus 实战二:开发REST ful 服务实现简单的curd功能

    Quarkus 实战二:开发REST ful 服务实现简单的curd 概述 Quarkus集成了RESTEasy,这是一种用于定义REST API的JAX-RS实现 参考文档: Quarkus 文档 ...

  5. Taro多端开发实现原理与项目实战(二)

    Taro多端开发实现原理与项目实战(二) 多端电商平台项目概述及开发准备 学习了前面的基础知识和进阶后是否跃跃欲试?我们准备了一个电商平台的项目来和大家一起实践使用 Taro 开发电商平台. 项目概述 ...

  6. Java微信公众号开发微信网页授权之前端传递code方式获取用户信息

    本片博客讲解的网页授权分为两步,前端先传递backUrl(回调地址)到后台网页授权接口,该接口拿到回调地址后组装授权连接,重定向到前端页面,前端页面截取Code,传入后端获取用户信息方法,获取用户信息 ...

  7. JSTL实战二之基础

    JSTL实战二之基础 一.JSTL的灵感 JSTL的设计灵感来自JavaScript和XPath WEB编程基于http,而http是简单的协议,所有的数据以字符形式提交,而java是一种强类型的语言 ...

  8. Java编程兵书,在实战中体会编程的快乐,初学和自学者的福音

    前言 Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 面向对象程序设计语言和 Java 平台的总称.由 James Gosling和同事们共同研发,并在 ...

  9. java淘宝客开发(二)

    java淘宝客开发(二) 淘宝客订单获取接口 第三方淘宝客订单接口调用示例 淘宝客订单获取接口 通过接口获取淘宝客订单,非渠道管理模块,只需要淘宝客授权即可.         通过在淘宝联盟开发平台文 ...

最新文章

  1. gpio pin和pad的区别
  2. ssh_config sshd_config 详解ssh_config sshd_config 详解
  3. androidsettitle方法_Android使用setCustomTitle()方法自定义对话框标题
  4. 《程序员修炼之道》读感
  5. FPGA Quartus Prime 16.1安装及破解
  6. jquery点击非div区域隐藏div
  7. NPM包管理器跟换国内镜像CNPM
  8. 怎么自动缩进_Python 的缩进是不是反人类的设计?
  9. 项目管理文档_项目管理和团队协同的轻量级工具——PMS,来了
  10. atitit.获取connection hibernate4
  11. Python个人博客项目-2.我的主页应用开发
  12. JavaScript之验证码--常用js特效
  13. 解决System进程占用80端口的问题
  14. web端内嵌二维码进行微信登陆
  15. 结合实际案例讲解系统分析方法
  16. 海康大华安防网络摄像头Onvif、RTSP网络无插件直播流媒体服务解决方案EasyNVR表单重复提交的优化方案
  17. usb_host_dll
  18. 星起航:现在做抖音小店晚不晚?
  19. 使用markdown编辑器
  20. #gStore-weekly | Centos7系统下gStore在 docker上的安装部署

热门文章

  1. 数据有什么特征和作用
  2. python select模块_深入理解python中的select模块
  3. matlab元胞元素_MATLAB元胞数组(cell)知识
  4. python爬取天气数据的header_[python爬虫]爬取天气网全国所有县市的天气数据
  5. 启动服务_用控制台启动一个wcf服务
  6. employees mysql_「employees」mysql示例employees数据库 - seo实验室
  7. spyder里import tensorflow报错显示没有tensorflow模块解决
  8. UVA 11478(差分约束 + 二分)
  9. 如何在命令行下使用Android NDK交叉编译工具
  10. 从oracle到mysql,主从到分库,一个普通项目数据库架构的变迁