Shiro笔记(三)授权

一、授权方式

1.编程式:

 Subject subject=SecurityUtils.getSubject();
if(subject.hasRole("root")){
//有权限
} else {
//无权限
}

2.注解式:

 @RequiresRoles("admin")
public void hello(){
//有权限才执行
}

3.JSP标签:

 <shiro:hasRole name="root">

 <!--有权限-->
</shiro:hasRole>

二、授权

1.基于角色的访问控制

规则:用户名=密码,角色1,角色2......

shiro-role.ini文件:

 [users]
tang=123,role1,role2
wang=321,role1

核心代码:

 /**
* @author Tang Jiujia
* @since 2017-10-16
*/
public class RoleTest extends BaseTest{ @Test
public void testHasRole(){
login("src/main/shiro-role.ini","tang","123");
Subject subject= SecurityUtils.getSubject();
Assert.assertTrue(subject.hasRole("role1"));
Assert.assertTrue(subject.hasAllRoles(Arrays.asList("role1","role2")));
boolean[] hasRoles = subject.hasRoles(Arrays.asList("role1", "role2", "role3")); for (int i=0;i<3;i++){
if (hasRoles[i]==true){
System.out.println("We have role"+(i+1));
}else {
System.out.println("We don't have role"+(i+1));
}
}
}
}
 //checkRole与前面的hasRole不同的地方在于判断为假时会抛UnauthorizedException
@Test(expected = UnauthorizedException.class)
public void testCheckRole(){
login("src/main/shiro-role.ini","tang","123");
Subject subject= SecurityUtils.getSubject();
subject.checkRole("role1");
subject.checkRoles("role1","role5");
}

2.基于资源的访问控制

规则:用户名=密码,角色1,角色2            角色=权限1,权限2

 [users]
tang=123,role1,role2
wang=321,role2
[roles]
role1=root:create,root:add,root:update
role2=root:delete,root:update

核心代码:

 /**
* @author Tang Jiujia
* @since 2017-10-16
*/
public class PermissionTest extends BaseTest{ @Test
public void testIsPermission(){
login("src/main/shiro-permission.ini","tang","123456");
Subject subject = SecurityUtils.getSubject();
if (subject.isPermitted("root:add1")) {
System.out.println("have add");
} else {
System.out.println("do not have add");
}
if (subject.isPermitted("root:update")) System.out.println("Have update permission");
} @Test
public void testCheckPermission(){
login("src/main/shiro-permission.ini","tang","123456");
Subject subject = SecurityUtils.getSubject();
subject.checkPermission("root:add");
}
}

Shiro笔记(三)授权的更多相关文章

  1. Shiro:学习笔记(2)——授权

    Shiro:学习笔记(2)——授权 Shiro的三种授权方式 编程式: Subject subject = SecurityUtils.getSubject(); if(subject.hasRole ...

  2. Shiro第三篇【授权、自定义reaml授权】

    Shiro授权 上一篇我们已经讲解了Shiro的认证相关的知识了,现在我们来弄Shiro的授权 Shiro授权的流程和认证的流程其实是差不多的: Shiro支持的授权方式 Shiro支持的授权方式有三 ...

  3. 构建高性能WEB站点笔记三

    构建高性能WEB站点笔记三 第10章 分布式缓存 10.1数据库的前端缓存区 文件系统内核缓冲区,位于物理内存的内核地址空间,除了使用O_DIRECT标记打开的文件以外,所有对磁盘文件的读写操作都要经 ...

  4. Shiro中的授权问题(二)

    上篇博客(Shiro中的授权问题 )我们介绍了Shiro中最最基本的授权问题,以及常见的权限字符的匹配问题.但是这里边还有许多细节需要我们继续介绍,本节我们就来看看Shiro中授权的一些细节问题. 验 ...

  5. Shiro中的授权问题

    在初识Shiro一文中,我们对Shiro的基本使用已经做了简单的介绍,不懂的小伙伴们可以先阅读上文,今天我们就来看看Shiro中的授权问题. Shiro中的授权,大体上可以分为两大类,一类是隐式角色, ...

  6. 【shiro】(4)---Shiro认证、授权案例讲解

    Shiro认证.授权案例讲解 一.认证  1. 认证流程     2.用户密码已经加密.加盐的用户认证 (1)测试类 // 用户登陆和退出,这里我自定了一个realm(开发肯定需要自定义realm获取 ...

  7. shiro源码篇 - shiro认证与授权,你值得拥有

    前言 开心一刻 我和儿子有个共同的心愿,出国旅游.昨天儿子考试得了全班第一,我跟媳妇合计着带他出国见见世面,吃晚饭的时候,一家人开始了讨论这个.我:“儿子,你的心愿是什么?”,儿子:“吃汉堡包”,我: ...

  8. Shiro笔记(四)编码/加密

    Shiro笔记(四)编码/加密 一.编码和解码 //base64编码.解码 @Test public void testBase64(){ String str="tang"; b ...

  9. Shiro笔记(二)身份验证

    Shiro笔记(二)身份验证 一.核心代码 @Test public void helloWorldTest(){ IniSecurityManagerFactory factory = new In ...

随机推荐

  1. 『PyTorch』第五弹_深入理解autograd_上:Variable属性方法

    在PyTorch中计算图的特点可总结如下: autograd根据用户对variable的操作构建其计算图.对变量的操作抽象为Function. 对于那些不是任何函数(Function)的输出,由用户创 ...

  2. 【vim】按时间回退文本 :earlier 1m

    Vim 会记录文件的更改,你很容易可以回退到之前某个时间.该命令是相当直观的.比如: :earlier 1m 会把文件回退到 1 分钟以前的状态. 注意,你可以使用下面的命令进行相反的转换: :lat ...

  3. nodejs 在线学习课堂

    http://ww***/class/5359f6f6ec7452081a7873d8

  4. mysql系列六、mysql创建用户、授权、备份及恢复命令

    一.创建用户和授权 下面的操作中,其中someusername为用户名,somepassword为密码,somedbname为数据库名 1.创建用户 create user 'someusername ...

  5. 【转】深入浅出JMS(二)--ActiveMQ简单介绍以及安装

    现实的企业中,对于消息通信的应用一直都非常的火热,而且在J2EE的企业应用中扮演着特殊的角色,所以对于它研究是非常有必要的. 这篇博文介绍一款开源的JMS具体实现——ActiveMQ.ActiveMQ ...

  6. 003_饿了么chaosmonkey实现

    背景 公司目前的服务设计大部分满足 design for failure 理念.随着业务复杂度的提升,我们很难再保证对系统故障的容错性.我们需要工具来验证服务的容错性,基于这个需求我们使用了 tc 工 ...

  7. 将本地光盘做成yum源

    环境:vmware 1.将centos6.5光盘挂载在虚拟机上 2.将光盘挂载在/mnt/cdrom目录下 root#  mkdir /mnt/cdrom root # mount /mnt/cdro ...

  8. 配置spring所需要的jar包

    spring.jar是包含有完整发布的单个jar 包,spring.jar中包含除了spring-mock.jar里所包含的内容外其它所有jar包的内容,因为只有在开发环境下才会用到 spring-m ...

  9. PYTHON-模块 json pickle shelve xml

    """ pickle 和 shevle 序列化后得到的数据 只有python才能解析 通常企业开发不可能做一个单机程序 都需要联网进行计算机间的交互 我们必须保证这个数据 ...

  10. Windows Server 2003 R2标准版 SP2 64位 (简体中文)官方原版ISO镜像

    Windows Server 2003 R2标准版 SP2 64位 (简体中文)官方原版ISO镜像迅雷下载   软件简介 Windows Server 2003 R2标准版是继Windows Serv ...