zoukankan      html  css  js  c++  java
  • 权限框架

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

    这次来说说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进行动态认证授权

  • 相关阅读:
    POJ 2104 K-th Number(主席树模板题)
    HDU 6072 Logical Chain(Kosaraju+bitset)
    POJ 2728 Desert King(最优比率生成树 01分数规划)
    HDU 6150 Vertex Cover(构造)
    51nod 1693 水群(神奇的最短路!)
    51nod 1444 破坏道路(最短路)
    51nod 1076 2条不相交的路径(边双连通分量)
    HDU 6156 Palindrome Function
    Cortex-M0(+)内核的处理器架构简介
    [转] 软件开发流程
  • 原文地址:https://www.cnblogs.com/leechenxiang/p/5612091.html
Copyright © 2011-2022 走看看