zoukankan      html  css  js  c++  java
  • Apache-shiro的内置Realm之iniRealm

    Realm简介:

    数据域,Shiro和安全数据的连接器,好比jdbc连接数据库; 通过realm获取认证授权相关信息

    realm作用:

    Shiro 从 Realm 获取安全数据

    默认自带的realm:

    idae查看realm继承关系,有默认实现和自定义继承的realm

    两个概念:

    principal : 主体的标示,可以有多个,但是需要具有唯一性,常见的有用户名,手机号,邮箱等

    credential:凭证, 一般就是密码

    所以一般我们说 principal + credential 就账号 + 密码

    开发中,往往是自定义realm , 即集成 AuthorizingRealm

    IniRealm:

    主要是将数据通过一定的格式存放在系统文件中:xxxxxx.ini

    在项目的resources目录下新建shiro.ini文件,内容为:

    # 格式 name=password,role1,role2,..roleN
    [users]
    #用户名 = 密码,所拥有的角色
    woxbwo = 456, user
    zbbiex = 123,admin,user​
    ​​ # 格式 role=permission1,permission2...permissionN 也可以用通配符 # 下面配置user的权限为所有video:find,video:buy,如果需要配置video全部操作crud 则 user = video:* [roles] user = video:find,video:buy # 'admin' role has all permissions, indicated by the wildcard '*' admin = *

    实战代码:

    public class ShiroIniRealmTest {
        @Test
        public void shiroIniRealmTest() {
            //创建SecurityManager工厂,通过配置文件ini创建
            Factory<SecurityManager> iniSecurityManagerFactory = new IniSecurityManagerFactory("classpath:shiro.ini");
            SecurityManager instance = iniSecurityManagerFactory.getInstance();
            //将securityManager 设置到当前运行环境中
            SecurityUtils.setSecurityManager(instance);
    
            Subject subject = SecurityUtils.getSubject();
            //用户输入的账号密码
            UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken("woxbwo", "456");
    
            subject.login(usernamePasswordToken);
    
            System.out.println(" 认证结果:"+subject.isAuthenticated());
    
            System.out.println(" 是否有对应的user角色:"+subject.hasRole("user"));
    
            System.out.println(" getPrincipal=" + subject.getPrincipal());
    
            subject.checkRole("user");
    
            subject.checkPermission("video:find");
    
            System.out.println( "是否有video:find 权限:"+ subject.isPermitted("video:find"));
    
    
            subject.logout();
    
            System.out.println("logout后认证结果:"+subject.isAuthenticated());
        }
    }

     

    验证结果

    认证结果:true
    是否有对应的user角色:true
    getPrincipal=woxbwo
    是否有video:find 权限:true
    01:18:42.477 [main] DEBUG org.apache.shiro.mgt.DefaultSecurityManager - Logging out subject with primary principal woxbwo
    01:18:42.477 [main] DEBUG org.apache.shiro.session.mgt.AbstractSessionManager - Stopping session with id [ab545c66-a6f9-43ed-b5f6-71e37e89c1cb]
    logout后认证结果:false

     

  • 相关阅读:
    CTF web之旅 20
    CTF web之旅 19
    CTF web之旅 18
    CTF web之旅 17
    CTF web之旅 16
    php数组遍历函数array_reduce、array_filter()、array_map()、array_walk()三者的用法和区别
    composer require安装的模块依赖和`composer.json`中版本冲突
    Linux执行shell出现错误bad interpreter: No such file or directory解决方法
    dcat-admin
    在Laravel外独立使用Eloquent
  • 原文地址:https://www.cnblogs.com/woxbwo/p/11280120.html
Copyright © 2011-2022 走看看