• 权限框架


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

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

  • 相关阅读:
    mac lsof使用查看端口
    mac 安装gevent报错
    vim命令学习
    linux批量关闭进程
    坐标点转换
    screen命令记录
    hashlib模块
    PyYAML和configparser模块讲解
    xml处理模块
    json、pickleshelve模块(超级好用~!)讲解
  • 原文地址:https://www.cnblogs.com/leechenxiang/p/5612091.html
Copyright © 2020-2023  润新知