第三章----2,用户、角色、权限基本使用
2018-01-29 10:56
288 查看
如果你的帐号密码登录了某一个系统,比如教务处系统。系统会通过你的帐号和密码判断出你是学生还是老师,或者你是管理系统的开发人员。
现在,我们先将“用户-----------------角色”,这样的对应关系写入配置文件authorization.ini。
配置文件的写法是 “用户名=密码,角色1,角色2,....角色n”。每一个角色对应的权限写到[roles]模块下面。写法是:角色=权限1,权限2.....,权限n
接着尝试验证 jay=123 这个用户,它究竟有什么角色。
测试代码@Test
public void test1(){
//加载配置文件生成安全工厂
Factory<org.apache.shiro.mgt.SecurityManager> factory = new IniSecurityManagerFactory("classpath:chapter3/authorization.ini");
//工厂生成安全中心
org.apache.shiro.mgt.SecurityManager sm = factory.getInstance();
//将安全中心放入全局域中
SecurityUtils.setSecurityManager(sm);
//全局域通过安全中心生成subject
Subject subject = SecurityUtils.getSubject();
//封装用户的数据
UsernamePasswordToken token = new UsernamePasswordToken("jay", "123");
//认证用户信息
subject.login(token);
//判断用户信息是否已经通过认证
Assert.assertTrue(subject.isAuthenticated());
//判断用户的 角色是不是CEO
Assert.assertTrue(subject.hasRole("CEO"));
//检查用户的 权限,与上面的区别是checkPermission方法会抛出异常,当然这个异常是RuntimeException
subject.checkRole("CEO");
}上面的代码使用jay=123登录,认证用户信息后,再检查用户的角色信息。有hasRole()方法和checkRole()方法。
接下来验证“用户-----------------角色------------------权限”
@Test
public void test2(){
//加载配置文件生成安全工厂
Factory<org.apache.shiro.mgt.SecurityManager> factory = new IniSecurityManagerFactory("classpath:chapter3/authorization.ini");
//工厂生成安全中心
org.apache.shiro.mgt.SecurityManager sm = factory.getInstance();
//将安全中心放入全局域中
SecurityUtils.setSecurityManager(sm);
//全局域通过安全中心生成subject
Subject subject = SecurityUtils.getSubject();
//封装用户的数据
UsernamePasswordToken token = new UsernamePasswordToken("jea", "456");
//认证用户信息
subject.login(token);
//判断用户信息是否已经通过认证
Assert.assertTrue(subject.isAuthenticated());
//检查用户的权限
Assert.assertTrue(subject.isPermitted("playGame"));
Assert.assertTrue(subject.isPermitted("eatFood"));
//希望为假,因为配置文件中CTO没有这个权限
Assert.assertFalse(subject.isPermitted("sleepFullDay"));
try {
//控制台将会打印:捕获到未授权异常
subject.checkPermission("sleepFullDay");//check开头的方法可能会抛出异常,当然这个异常是运行时异常
}catch (AuthorizationException e){
System.out.println("捕获到未授权异常");
}
}
现在,我们先将“用户-----------------角色”,这样的对应关系写入配置文件authorization.ini。
配置文件的写法是 “用户名=密码,角色1,角色2,....角色n”。每一个角色对应的权限写到[roles]模块下面。写法是:角色=权限1,权限2.....,权限n
[main] [users] jay=123,CEO jea=456,CTO [roles] CEO=watchTv,sleepFullDay CTO=playGame,eatFood
接着尝试验证 jay=123 这个用户,它究竟有什么角色。
测试代码@Test
public void test1(){
//加载配置文件生成安全工厂
Factory<org.apache.shiro.mgt.SecurityManager> factory = new IniSecurityManagerFactory("classpath:chapter3/authorization.ini");
//工厂生成安全中心
org.apache.shiro.mgt.SecurityManager sm = factory.getInstance();
//将安全中心放入全局域中
SecurityUtils.setSecurityManager(sm);
//全局域通过安全中心生成subject
Subject subject = SecurityUtils.getSubject();
//封装用户的数据
UsernamePasswordToken token = new UsernamePasswordToken("jay", "123");
//认证用户信息
subject.login(token);
//判断用户信息是否已经通过认证
Assert.assertTrue(subject.isAuthenticated());
//判断用户的 角色是不是CEO
Assert.assertTrue(subject.hasRole("CEO"));
//检查用户的 权限,与上面的区别是checkPermission方法会抛出异常,当然这个异常是RuntimeException
subject.checkRole("CEO");
}上面的代码使用jay=123登录,认证用户信息后,再检查用户的角色信息。有hasRole()方法和checkRole()方法。
接下来验证“用户-----------------角色------------------权限”
@Test
public void test2(){
//加载配置文件生成安全工厂
Factory<org.apache.shiro.mgt.SecurityManager> factory = new IniSecurityManagerFactory("classpath:chapter3/authorization.ini");
//工厂生成安全中心
org.apache.shiro.mgt.SecurityManager sm = factory.getInstance();
//将安全中心放入全局域中
SecurityUtils.setSecurityManager(sm);
//全局域通过安全中心生成subject
Subject subject = SecurityUtils.getSubject();
//封装用户的数据
UsernamePasswordToken token = new UsernamePasswordToken("jea", "456");
//认证用户信息
subject.login(token);
//判断用户信息是否已经通过认证
Assert.assertTrue(subject.isAuthenticated());
//检查用户的权限
Assert.assertTrue(subject.isPermitted("playGame"));
Assert.assertTrue(subject.isPermitted("eatFood"));
//希望为假,因为配置文件中CTO没有这个权限
Assert.assertFalse(subject.isPermitted("sleepFullDay"));
try {
//控制台将会打印:捕获到未授权异常
subject.checkPermission("sleepFullDay");//check开头的方法可能会抛出异常,当然这个异常是运行时异常
}catch (AuthorizationException e){
System.out.println("捕获到未授权异常");
}
}
相关文章推荐
- 常用sql命令@oracle数据类型概括@权限、角色、用户的创建于使用@伪列及其注意事项
- 常用sql命令@oracle数据类型概括@权限、角色、用户的创建于使用@伪列及其注意事项
- sys通过授予select_catalog_role角色给用户,使用户有权限查询数据字典。
- 第三天3-1锁,事务】【账号锁定】【配额限制用户使用表空间的量】【查询当前session的用户权限】【session包含的角色】
- Yii中使用RBAC完全指南 (用户角色权限控制)
- c#实现按用户角色分配菜单的使用权限(WinForm)
- Yii中使用RBAC完全指南 (用户角色权限控制)
- Yii中使用RBAC完全指南 (用户角色权限控制)
- [.Net MVC] 用户角色权限管理_使用CLK.AspNet.Identity
- 使用Lync 2013 基于角色的权限控制:RBAC 给用户分配指定的操作权限
- postgreSQL 用户、角色、权限、数据库的简单使用
- c#实现按用户角色分配菜单的使用权限(WinForm)
- 浅析Yii中使用RBAC的完全指南(用户角色权限控制)
- 使用Zend_Auth和Zend_Acl进行登录认证及根据用户角色进行权限控制
- restlet2.1 学习笔记(十一)为用户分配角色,并使用角色控制权限。
- Oracle数据库(权限、用户、角色、基本知识介绍)
- MySql用户角色管理及权限分配(使用MySQLMembershipProvider和MySqlRoleProvider)
- Oracle基本安全之用户、角色和权限操作
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(21)-用户角色权限基本的实现说明
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(21)-用户角色权限基本的实现说明