Apache shiro 笔记整理之编程式授权
下面内容是在看了涛哥的《跟我一起学shiro》 和 视频《一头扎入进shiro》 后整理出来备忘和方便自己和其它人学习。
个人主页:http://www.itit123.cn/ 很多其它干货等你来拿
授权相关概念了解
权限认证:什么样的用户拥有什么样的权限做什么样的事。
三要素:权限,角色,用户。
角色:权限的集合。一个角色能够拥有多个权限
用户:角色的集合。一个用户能够拥有多个角色。也就是Subject
上代码:
为了方便函数的调用,将用户登录代码封装一下:
package com.shiro.utils; import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory; public class ShiroUtil { public static Subject login(String config , String userName ,String password){
// 1.读取配置文件,初始化SecurityManager工厂
Factory<SecurityManager> factory=new IniSecurityManagerFactory(config);
// 2.获取securityManager实例
SecurityManager securityManager=factory.getInstance();
// 3.把securityManager实例绑定到SecurityUtils
SecurityUtils.setSecurityManager(securityManager);
// 4.获取当前运行的用户
Subject currentUser=SecurityUtils.getSubject();
// 5.创建token令牌。username/密码
UsernamePasswordToken token=new UsernamePasswordToken(userName, password);
try{
// 6.登录时认证身份
currentUser.login(token);
System.out.println("身份认证成功! ");
}catch(AuthenticationException e){
e.printStackTrace();
System.out.println("身份认证失败!");
}
return currentUser;
} }
基于角色的訪问控制
在之前的基础上新建shiro_role.ini
[users]
ITDragon=123456,role1,role2
other=123456,role1
another=123456,role2
单元測试类:
hasRole拥有什么权限,checkRole检查有什么权限
// 基于角色
@Test
public void hasRoleTest(){
Subject user = ShiroUtil.login("classpath:shiro_role.ini", "other", "123456");
System.out.println(user.hasRole("role1")? "是role1角色":"不是role1角色");
// 測试时不能同一时候存在。由于另外一个还没有退出
//Subject user2 = ShiroUtil.login("classpath:shiro_role.ini", "ITDragon", "123456");
boolean[] result = user.hasRoles(Arrays.asList("role1","role2"));
for (boolean role : result) {
System.out.println(role);
}
System.out.println(user.hasAllRoles(Arrays.asList("role1","role2"))?"都拥有role1。role2角色":"不全拥有role1,role2角色");
user.logout();
} @Test
public void checkRoleTest(){
Subject user = ShiroUtil.login("classpath:shiro_role.ini", "ITDragon", "123456");
// 验证不通过报错
user.checkRole("role1");
user.checkRoles(Arrays.asList("role1","role2"));
user.checkRoles("role1","role2");
user.logout();
}
基于权限的訪问控制:
[users]
ITDragon=123456,role1,role2
other=123456,role1
another=123456,role2
[roles]
role1=user:select
role2=user:update,user:delete
单元測试类:
// 基于权限
@Test
public void isPermittedTest(){
Subject user = ShiroUtil.login("classpath:shiro_permission.ini", "other", "123456");
System.out.println(user.isPermitted("user:select")?"拥有select权限":"没有select权限");
boolean[] result = user.isPermitted("user:select","user:update","user:delete");
for (boolean role : result) {
System.out.println(role);
}
System.out.println(user.isPermittedAll("user:select","user:update")?"都拥有select,updata权限":"不全拥有select,updata权限");
user.logout();
} @Test
public void checkPermittedTest(){
Subject user = ShiroUtil.login("classpath:shiro_permission.ini", "other", "123456");
user.checkPermission("user:select");
user.checkPermissions("user:select","user:update","user:delete");
user.logout();
}
犯的错误:
在一个測试方法中登入了两个用户,并没有做用户退出操作。影响:权限推断错误。
Apache shiro 笔记整理之编程式授权的更多相关文章
- Apache shiro 笔记整理之web整合一
下面内容是在看了涛哥的<跟我一起学shiro> 和 视频<一头扎入进shiro> 后整理出来备忘和方便自己和其它人学习. 个人主页:http://www.itit123.cn/ ...
- Shiro基础知识03----shiro授权(编程式授权),Permission详解,授权流程(zz)
授权,也叫访问控制,即在应用中控制谁能访问哪些资源(如访问页面/编辑数据/页面操作等). 在权限认证中,最核心的是:主体/用户(Subject).权限(Permission).角色(Role).资源 ...
- Shiro-权限认证(授权)-编程式授权
权限认证 权限认证也就是访问控制,即在应用中控制谁能访问哪些资源 权限认证核心要素 权限 : 即操作资源的权利,比如访问某个页面,以及对某个模块的数据的添加,修改,删除,查看的权利 角色 : 是权限的 ...
- 使用shiro做权限管理的学习笔记整理
Shiro权限管理 参考:https://www.cnblogs.com/jpfss/p/8352031.html Shiro解决的问题 授权和鉴别的问题:Authenrization(授权) Aut ...
- apache shiro内置过滤器 标签 注解
内置过滤器 anon(匿名) org.apache.shiro.web.filter.authc.AnonymousFilter authc(身份验证) org.apache.shiro ...
- Shiro笔记(三)授权
Shiro笔记(三)授权 一.授权方式 1.编程式: Subject subject=SecurityUtils.getSubject(); if(subject.hasRole("root ...
- Apache Shiro安全(权限框架)学习笔记二
课程目标 通过学习本课程掌握权限管理的设计思想及方法,使用Shiro框架完成权限管理功能开发. 1. 理解基于资源的权限管理方法. 2. 掌握权限管理的数据模型. 3. 掌握不使用shiro开发 ...
- Apache Shiro安全(权限框架)学习笔记一
1. 授权需要继承 AuthorizingRealm 类, 并实现其 doGetAuthorizationInfo 方法 2. AuthorizingRealm 类继承自 Authenticating ...
- Apache Shiro 使用手册(三)Shiro 授权
授权即访问控制,它将判断用户在应用程序中对资源是否拥有相应的访问权限. 如,判断一个用户有查看页面的权限,编辑数据的权限,拥有某一按钮的权限,以及是否拥有打印的权限等等. 一.授权的三要素 授权有着三 ...
随机推荐
- CSS BFC学习笔记
BFC,全称是Block Formatting Context,块级格式化上下文. 详细是什么,能够理解为页面元素的一种特性.触发了BFC的元素往往会产生一些对刚開始学习的人而言意想不到的效果. 触发 ...
- Autodesk 举办的 Revit 2015 二次开发速成( 1.5 天),教室培训, 地点武汉
2014年8月26日9:00 – 17:00 2014年8月27日9:00 – 12:00 培训地点: Ø 湖北工业大学 实训楼605教室 Ø 地址:武汉市武昌区南湖李家墩一村一号 Ø 交通路线说明: ...
- ES 内存使用和GC指标——主节点每30秒会去检查其他节点的状态,如果任何节点的垃圾回收时间超过30秒(Garbage collection duration),则会导致主节点任务该节点脱离集群。
摘录自:http://blog.csdn.net/yangwenbo214/article/details/74000458 内存使用和GC指标 在运行Elasticsearch时,内存是您要密切监控 ...
- 百度开源其NLP主题模型工具包,文本分类等场景可直接使用L——LDA进行主题选择本质就是降维,然后用于推荐或者分类
2017年7月4日,百度开源了一款主题模型项目,名曰:Familia. InfoQ记者第一时间联系到百度Familia项目负责人姜迪并对他进行采访,在本文中,他将为我们解析Familia项目的技术细节 ...
- 如何使用github来展示自己的网页
项目文档或者单纯的html页面怎么用github来展示呢? 第一步:新建库 第二步: 上传自己的页面(index.html需在根目录下) 先把git库克隆下来 进入lineShop文件夹,拷贝自己的页 ...
- 4. Median of Two Sorted Arrays[H]两个有序数组的中位数
题目 There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the midian of the ...
- BZOJ 4028 分块
zrt当年是怎么想到的--. 思路: 考虑把序列分块 对于每块 存xor[i] 表示从本块开头到i的前缀异或和 把它扔进set里 存gcd[i]表示从本块开头到i的前缀gcd. 如果这一块的GCD和整 ...
- c#设计模式(1)
本文摘取自吕震宇的博客园文章,版权归吕震宇仅供个人学习参考.转载请标明原作者吕震宇. 这学期开设设计模式课程,将课件放上来. 课本:<C#设计模式>,电子工业出版社,ISBN 7-5053 ...
- MyBatis数据持久化(十一)Mybatis3、Spring4、Struts2整合开发
上一节我们將Mybatis和Spring4进行整合,本节向大家介绍Mybatis在Web开发中的应用,并与主流的MVC框架Struts2进行整合. 我们首先需要获取Struts2框架,Struts2官 ...
- SQL 学习——简序以及学习路线
1.最近发现自己除去简单的SQL语句好像其他的并不怎么懂哎,虽然暂时是android用不到太复杂点的语句,想来总不能一直这样把, 顺带还是看看Sql. 2.画个图规划下自己的学习路线