Shiro:学习笔记(2)——授权
Shiro:学习笔记(2)——授权
Shiro的三种授权方式
编程式:
Subject subject = SecurityUtils.getSubject(); if(subject.hasRole(“admin”)) { //有权限 } else { //无权限 }
注解式:
@RequiresRoles("admin") public void hello() { //有权限 }
说明:没有权限将抛出相应的异常
JSP标签:
<shiro:hasRole name="admin"> <!— 有权限 —> </shiro:hasRole>
基于角色的访问控制
1.在ini中配置用户所拥有的角色
[users] zhang=123,role1,role2 wang=123,role
规则:用户名=密码,角色1,角色2
说明:Shiro不负责维护用户-角色信息,需要应用提供,Shiro只提供相应的接口方便验证。
2.测试用例
3.缺点:
如果有一天摒弃了某个角色,就需要把所有相关的地方进行删除。
基于资源的访问控制
1.在ini中配置用户所拥有的角色及角色-权限关系
[users] zhang=123,role1,role2 wang=132,role1 [roles] role1=user:create,user:update role2=user:create,user:delete
2.测试用例
字符串通配符权限
1、单个资源单个权限
subject().checkPermissions("system:user:update");
用户拥有资源“system:user”的“update”权限。
2.单个资源多个权限
role41=system:user:update,system:user:delete
subject().checkPermissions("system:user:update", "system:user:delete");
用户拥有资源“system:user”的“update”和“delete”权限。如上可以简写成:
role42="system:user:update,delete" //注意引号
subject().checkPermissions("system:user:update,delete");
3.单个资源全部权限
role51="system:user:create,update,delete,view"
subject().checkPermissions("system:user:create,delete,update:view");
用户拥有资源“system:user”的“create”、“update”、“delete”和“view”所有权限。如上可以简写成:
role52=system:user:*
也可以简写为(推荐上边的写法):
role53=system:user
然后通过如下代码判断
- subject().checkPermissions("system:user:*");
- subject().checkPermissions("system:user");
通过“system:user:*”验证“system:user:create,delete,update:view”可以,但是反过来是不成立的。
4、所有资源全部权限
- role61=*:view
然后通过如下代码判断
- subject().checkPermissions("user:view");
用户拥有所有资源的“view”所有权限。假设判断的权限是“"system:user:view”,那么需要“role5=*:*:view”这样写才行。
5、实例级别的权限
5.1、单个实例单个权限
- role71=user:view:1
对资源user的1实例拥有view权限。
然后通过如下代码判断
- subject().checkPermissions("user:view:1");
5.2、单个实例多个权限
- role72="user:update,delete:1"
对资源user的1实例拥有update、delete权限。
然后通过如下代码判断
- subject().checkPermissions("user:delete,update:1");
- subject().checkPermissions("user:update:1", "user:delete:1");
5.3、单个实例所有权限
- role73=user:*:1
对资源user的1实例拥有所有权限。
然后通过如下代码判断
- subject().checkPermissions("user:update:1", "user:delete:1", "user:view:1");
5.4、所有实例单个权限
- role74=user:auth:*
对资源user的1实例拥有所有权限。
然后通过如下代码判断
- subject().checkPermissions("user:auth:1", "user:auth:2");
5.5、所有实例所有权限
- role75=user:*:*
对资源user的1实例拥有所有权限。
然后通过如下代码判断
- subject().checkPermissions("user:view:1", "user:auth:2");
6、Shiro对权限字符串缺失部分的处理
如“user:view”等价于“user:view:*”;而“organization”等价于“organization:*”或者“organization:*:*”。可以这么理解,这种方式实现了前缀匹配。
另外如“user:*”可以匹配如“user:delete”、“user:delete”可以匹配如“user:delete:1”、“user:*:1”可以匹配如“user:view:1”、“user”可以匹配“user:view”或“user:view:1”等。即*可以匹配所有,不加*可以进行前缀匹配;但是如“*:view”不能匹配“system:user:view”,需要使用“*:*:view”,即后缀匹配必须指定前缀(多个冒号就需要多个*来匹配)。
7、WildcardPermission
如下两种方式是等价的:
subject().checkPermission("menu:view:1"); subject().checkPermission(new WildcardPermission("menu:view:1"));
因此没什么必要的话使用字符串更方便。
Shiro:学习笔记(2)——授权的更多相关文章
- shiro学习笔记_0500_授权
1,授权:给身份认证通过的人,授予他可以访问某些资源的权限. 2,权限粒度:分为粗粒度和细粒度. 粗粒度:例如对 user 的 crud,也就是通常所说的对表的操作. 细粒度:对表中记录的操作.如 只 ...
- shiro学习笔记_0600_自定义realm实现授权
博客shiro学习笔记_0400_自定义Realm实现身份认证 介绍了认证,这里介绍授权. 1,仅仅通过配置文件来指定权限不够灵活且不方便.在实际的应用中大多数情况下都是将用户信息,角色信息,权限信息 ...
- Shiro学习笔记(5)——web集成
Web集成 shiro配置文件shiroini 界面 webxml最关键 Servlet 測试 基于 Basic 的拦截器身份验证 Web集成 大多数情况.web项目都会集成spring.shiro在 ...
- Shiro学习笔记总结,附加" 身份认证 "源码案例(一)
Shiro学习笔记总结 内容介绍: 一.Shiro介绍 二.subject认证主体 三.身份认证流程 四.Realm & JDBC reaml介绍 五.Shiro.ini配置介绍 六.源码案例 ...
- Shiro 学习笔记(一)——shiro简介
Apache Shiro 是一个安全框架.说白了,就是进行一下 权限校验,判断下这个用户是否登录了,是否有权限去做这件事情. Shiro 可以帮助我们完成:认证.授权.加密.会话管理.与web 集成. ...
- Shiro学习笔记 三(认证授权)
第一种首先基于角色的权限控制 1.由于不断的创建SecurityFactory工程等步骤重复多次,所以应该将这些步骤封装成一个工具类 还是首先看一下目录结构 主要用到文件 首先贴一下工具类的方法 pa ...
- [shiro学习笔记]第二节 shiro与web融合实现一个简单的授权认证
本文地址:http://blog.csdn.net/sushengmiyan/article/details/39933993 shiro官网:http://shiro.apache.org/ shi ...
- shiro学习笔记_0100_shiro简介
前言:第一次知道shiro是2016年夏天,做项目时候我要写springmvc的拦截器,申哥看到后,说这个不安全,就给我捣鼓了shiro,我就看了下,从此认识了shiro.此笔记是根据网上的视频教程记 ...
- Shiro学习笔记四(Shiro集成WEB)
这两天由于家里出了点事情,没有准时的进行学习.今天补上之前的笔记 -----没有学不会的技术,只有不停找借口的人 学习到的知识点: 1.Shiro 集成WEB 2.基于角色的权限控制 3.基于权限的控 ...
随机推荐
- 51单片机 | 并行I/O口扩展实例(74LS244/74LS373/4071)
并行I/O口扩展实例 //<51单片机原理及应用(第二版)——基于Keil C与Proteus>第四章例4.4 I/O口不能完全用于输入/输出操作,当需要扩展外部存储器时,P0.P2口用作 ...
- java 字符深入知识,待整理
'编',"编", 为什么获取到的字节数组长度不一样 http://www.cnblogs.com/yongdaimi/p/5899328.html Unicode 官网 http ...
- iOS项目开发之仿网易彩票推荐应用
简介 效果展示 思路分析 代码实现 Git地址 一.简介 某些公司有较多的产品时,通常会在一个产品中推广另外的一些产品,我简单的封装了一个UIControllerView,由于不同公司,要求不同.所以 ...
- 使用lua扩展应用程序
全局变量的操作 void lua_getglobal(lua_State * L ,const char * name) 此函数从lua中取出一个名为name的全局变量并将其压入栈中. 如当lua文件 ...
- hdu 5371 Hotaru's problem【manacher】
题目链接: http://acm.hdu.edu.cn/showproblem.php? pid=5371 题意: 给出一个长度为n的串,要求找出一条最长连续子串.这个子串要满足:1:能够平均分成三段 ...
- synchronized加static区别
在多线程中,在synchronise方法上加上static 表示的是类锁,锁住的是整个类.而synchroinized 锁住的是当前方法,当前对象.
- 详细的obs操作教程(windows/mac)图解
直播推流软件obs操作配置教程包含支持mac和windows配置 1 2 3 4 5 6 7 8 9
- Vim使用个人心得
个人最近在Windows上使用gVim 1.移动光标 h,j,k,l 键为左,下,上,右,方向键,控制光标移动,插入状态下不可用,插入状态下,按V键进入查看状态,可使用. 2.进入编辑模式:按 i 键 ...
- 二级导航内容均分--jquery
这个是去年做过的一个项目中的算法,个人感觉还可以,所以拿出来分享下. 背景:头部导航二级导航有些内容太长,一列的话太过难看,就要分成两列,要做到按块尽量均分,排列顺序没有限制. 原理: 1.把各个二级 ...
- Struts 2 框架特性
POJO形式和POJO动作 - 已经摆脱了Struts2的动作表单的Struts框架的一个组成部分.Struts2可以使用任何的POJO接收的形式输入.同样的,你现在可以看到任何POJO的Action ...