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

 

猜你喜欢

转载自www.cnblogs.com/woxbwo/p/11280120.html