java 2 %3c%3c 3_Shiro 实战(二)-授权
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 实战(二)-授权相关推荐
- java爬取网页数据_Python网络爬虫实战(二)数据解析
Python网络爬虫实战 (二)数据解析 本系列从零开始阐述如何编写Python网络爬虫,以及网络爬虫中容易遇到的问题,比如具有反爬,加密的网站,还有爬虫拿不到数据,以及登录验证等问题,会伴随大量网站 ...
- Java零基础入门:实战教程(二)
博主简介: 博客主页:Java知识分享博主 Java零基础入门专栏:Java零基础入门专栏 Java交流社区:飞鸟社区 欢迎阅读,如果文章对你有帮助点赞,支持一下! 推荐阅读 Java零基础入门:概论 ...
- java的 %3c%3c 运算符_scanf(%3c%3c, a, b)
问题 在书中看到这样的描述: 我们按照这个来操作一下: 代码 #include int main(int argc, char const *argv[]) { char a, b; scanf(&q ...
- Quarkus 实战二:开发REST ful 服务实现简单的curd功能
Quarkus 实战二:开发REST ful 服务实现简单的curd 概述 Quarkus集成了RESTEasy,这是一种用于定义REST API的JAX-RS实现 参考文档: Quarkus 文档 ...
- Taro多端开发实现原理与项目实战(二)
Taro多端开发实现原理与项目实战(二) 多端电商平台项目概述及开发准备 学习了前面的基础知识和进阶后是否跃跃欲试?我们准备了一个电商平台的项目来和大家一起实践使用 Taro 开发电商平台. 项目概述 ...
- Java微信公众号开发微信网页授权之前端传递code方式获取用户信息
本片博客讲解的网页授权分为两步,前端先传递backUrl(回调地址)到后台网页授权接口,该接口拿到回调地址后组装授权连接,重定向到前端页面,前端页面截取Code,传入后端获取用户信息方法,获取用户信息 ...
- JSTL实战二之基础
JSTL实战二之基础 一.JSTL的灵感 JSTL的设计灵感来自JavaScript和XPath WEB编程基于http,而http是简单的协议,所有的数据以字符形式提交,而java是一种强类型的语言 ...
- Java编程兵书,在实战中体会编程的快乐,初学和自学者的福音
前言 Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 面向对象程序设计语言和 Java 平台的总称.由 James Gosling和同事们共同研发,并在 ...
- java淘宝客开发(二)
java淘宝客开发(二) 淘宝客订单获取接口 第三方淘宝客订单接口调用示例 淘宝客订单获取接口 通过接口获取淘宝客订单,非渠道管理模块,只需要淘宝客授权即可. 通过在淘宝联盟开发平台文 ...
最新文章
- gpio pin和pad的区别
- ssh_config sshd_config 详解ssh_config sshd_config 详解
- androidsettitle方法_Android使用setCustomTitle()方法自定义对话框标题
- 《程序员修炼之道》读感
- FPGA Quartus Prime 16.1安装及破解
- jquery点击非div区域隐藏div
- NPM包管理器跟换国内镜像CNPM
- 怎么自动缩进_Python 的缩进是不是反人类的设计?
- 项目管理文档_项目管理和团队协同的轻量级工具——PMS,来了
- atitit.获取connection hibernate4
- Python个人博客项目-2.我的主页应用开发
- JavaScript之验证码--常用js特效
- 解决System进程占用80端口的问题
- web端内嵌二维码进行微信登陆
- 结合实际案例讲解系统分析方法
- 海康大华安防网络摄像头Onvif、RTSP网络无插件直播流媒体服务解决方案EasyNVR表单重复提交的优化方案
- usb_host_dll
- 星起航:现在做抖音小店晚不晚?
- 使用markdown编辑器
- #gStore-weekly | Centos7系统下gStore在 docker上的安装部署
热门文章
- 数据有什么特征和作用
- python select模块_深入理解python中的select模块
- matlab元胞元素_MATLAB元胞数组(cell)知识
- python爬取天气数据的header_[python爬虫]爬取天气网全国所有县市的天气数据
- 启动服务_用控制台启动一个wcf服务
- employees mysql_「employees」mysql示例employees数据库 - seo实验室
- spyder里import tensorflow报错显示没有tensorflow模块解决
- UVA 11478(差分约束 + 二分)
- 如何在命令行下使用Android NDK交叉编译工具
- 从oracle到mysql,主从到分库,一个普通项目数据库架构的变迁