您的位置:首页 > 其它

第三章----2,用户、角色、权限基本使用

2018-01-29 10:56 288 查看
如果你的帐号密码登录了某一个系统,比如教务处系统。系统会通过你的帐号和密码判断出你是学生还是老师,或者你是管理系统的开发人员。

现在,我们先将“用户-----------------角色”,这样的对应关系写入配置文件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("捕获到未授权异常");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐