权限框架 - shiro 授权demo

之前说了权限认证,其实也就是登录验证身份

这次来说说shiro的授权

shiro可以针对角色授权,或者访问资源授权

两者都行,但是在如今的复杂系统中,当然使用后者,如果你是小系统或者私活的话,前者即可,甚至可以不用,我懂的

好吧,上代码:

首先新建一个ini,登陆信息以及权限配置好

 1 #用户
 2 [users]
 3 #eric 用户nathan的密码是123456,拥有boss以及hr两个权限
 4 eric=123456,boss,hr
 5 merry=123456,hr
 6 
 7 #权限
 8 [roles]
 9 #角色对用资源user来说拥有create以及update权限
10 boss=user:create,user:update
11 #角色对用资源user来说拥有create以及delete权限
12 hr=user:create,user:delete
13 #角色对用资源user来说拥有create权限
14 tl=user:create

 

 

以下代码先登陆,后授权,分为角色以及资源

 1 @Test
 2     public void testAuthorization() {
 3 
 4         // 创建SecurityManager工厂
 5         Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro/shiro-permission.ini");
 6         // 创建SecurityManager
 7         SecurityManager securityManager = factory.getInstance();
 8         // 将SecurityManager设置到系统运行环境,和spring后将SecurityManager配置spring容器中,一般单例管理
 9         SecurityUtils.setSecurityManager(securityManager);
10         // 创建subject
11         Subject subject = SecurityUtils.getSubject();
12         // 创建token令牌
13         UsernamePasswordToken token = new UsernamePasswordToken("eric", "123456");
14         // 执行认证
15         try {
16             subject.login(token);
17         } catch (AuthenticationException e) {
18             e.printStackTrace();
19         }
20         System.out.println("认证状态:" + subject.isAuthenticated());
21         // 认证通过后执行授权
22 
23         // 基于角色的授权
24         // hasRole传入角色标识
25         boolean ishasRole = subject.hasRole("hr");
26         System.out.println("单个角色判断" + ishasRole);
27         // hasAllRoles是否拥有多个角色
28         boolean hasAllRoles = subject.hasAllRoles(Arrays.asList("boss", "hr", "tl"));
29         System.out.println("多个角色判断" + hasAllRoles);
30 
31         // 使用check方法进行授权,如果授权不通过会抛出异常
32         // subject.checkRole("employee");
33 
34         // 基于资源的授权
35         // isPermitted传入权限标识符
36         boolean isPermitted = subject.isPermitted("user:create:1");
37         System.out.println("单个权限判断" + isPermitted);
38 
39         boolean isPermittedAll = subject.isPermittedAll("user:create:1",
40                 "user:delete");
41         System.out.println("多个权限判断" + isPermittedAll);
42 
43         // 使用check方法进行授权,如果授权不通过会抛出异常
44         subject.checkPermission("items:create:1");
45 
46     }

 

这些都是简单的配置

过后会讲讲如何配合springmvc spring 以及mybatis进行动态认证授权

上一篇:B树和B+树


下一篇:网络互撕是群体极化的典型症状