Shiro笔记(三)授权
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笔记(三)授权的更多相关文章
- Shiro:学习笔记(2)——授权
Shiro:学习笔记(2)——授权 Shiro的三种授权方式 编程式: Subject subject = SecurityUtils.getSubject(); if(subject.hasRole ...
- Shiro第三篇【授权、自定义reaml授权】
Shiro授权 上一篇我们已经讲解了Shiro的认证相关的知识了,现在我们来弄Shiro的授权 Shiro授权的流程和认证的流程其实是差不多的: Shiro支持的授权方式 Shiro支持的授权方式有三 ...
- 构建高性能WEB站点笔记三
构建高性能WEB站点笔记三 第10章 分布式缓存 10.1数据库的前端缓存区 文件系统内核缓冲区,位于物理内存的内核地址空间,除了使用O_DIRECT标记打开的文件以外,所有对磁盘文件的读写操作都要经 ...
- Shiro中的授权问题(二)
上篇博客(Shiro中的授权问题 )我们介绍了Shiro中最最基本的授权问题,以及常见的权限字符的匹配问题.但是这里边还有许多细节需要我们继续介绍,本节我们就来看看Shiro中授权的一些细节问题. 验 ...
- Shiro中的授权问题
在初识Shiro一文中,我们对Shiro的基本使用已经做了简单的介绍,不懂的小伙伴们可以先阅读上文,今天我们就来看看Shiro中的授权问题. Shiro中的授权,大体上可以分为两大类,一类是隐式角色, ...
- 【shiro】(4)---Shiro认证、授权案例讲解
Shiro认证.授权案例讲解 一.认证 1. 认证流程 2.用户密码已经加密.加盐的用户认证 (1)测试类 // 用户登陆和退出,这里我自定了一个realm(开发肯定需要自定义realm获取 ...
- shiro源码篇 - shiro认证与授权,你值得拥有
前言 开心一刻 我和儿子有个共同的心愿,出国旅游.昨天儿子考试得了全班第一,我跟媳妇合计着带他出国见见世面,吃晚饭的时候,一家人开始了讨论这个.我:“儿子,你的心愿是什么?”,儿子:“吃汉堡包”,我: ...
- Shiro笔记(四)编码/加密
Shiro笔记(四)编码/加密 一.编码和解码 //base64编码.解码 @Test public void testBase64(){ String str="tang"; b ...
- Shiro笔记(二)身份验证
Shiro笔记(二)身份验证 一.核心代码 @Test public void helloWorldTest(){ IniSecurityManagerFactory factory = new In ...
随机推荐
- MySQL版本升级参考资料【转】
MySQL升级参考资料 MySQL 升级的最佳实践 - 技术翻译 - 开源中国社区https://www.oschina.net/translate/mysql-upgrade-best-practi ...
- 编写html与js交互网页心得:编写两个按钮切换显示不同的图片
第一步:先建立一个html网页,如下: <!DOCTYPE html><html> <head> <meta charset="utf-8&quo ...
- windows Tomcat apr安装
背景 这都是当时不了解这个东西,又怕忘了记下来的,其实试验后.也就那么回事. 转载 Tomcat Native 这个项目可以让 Tomcat 使用 Apache 的 apr 包来处理包括文件和网络IO ...
- pom.xml的第一行报错
第一行:<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.or ...
- centos6.8系统安装 Hadoop 2.7.3伪分布式集群
安装 Hadoop 2.7.3 配置ssh免密码登陆 cd ~/.ssh # 若没有该目录,请先执行一次ssh localhost ssh-keygen - ...
- python操作haproxy.cfg文件
需求 1.查 输入:www.oldboy.org 获取当前backend下的所有记录 2.新建 输入: arg = { 'bakend': 'www.oldboy.org', 'record':{ ' ...
- zabbix3.0对tcp连接数和状态的监控优化
zabbix3.0对tcp连接数及状态的监控优化 之前对tcp的监控采用netstat命令,发现在服务器繁忙的时候效果不理想,这个命令占用大量的cpu有时候高达90%以上,可能会导致业务的不稳定,所以 ...
- Spring_使用XML文件的方式配置事务
步骤: 正常配置jdbctemplate 正常配置bean 配置事物管理器 配置事物管理器 配置aop切入点,通过切入点把事物链接起来 思路: 接着上一个买书的例子吧,直接拷到新包下,把注解都干掉,需 ...
- python flask安装
windows环境上,打开命令行,输入pip list 检查列表中是否安装过flask 安装flask命令:pip install flask 出现Successfully installed等提 ...
- Oracle常用sql语句(一)
# Sql的分类 # DDL (Data Definition Language):数据定义语言,用来定义数据库对象:库.表.列等: CREATE. ALTER.DROP DML(Data Manip ...