2021-11-25 shiro-core IniRealm源码分析(二)

2021SC@SDUSC
IniRealm的类继承关系图
在这里插入图片描述
2.IniRealm
基于Ini配置创建SimpleAccount实例的Realm实现。
此实现在Ini配置中查找两个sections :


   [users]
   # One or more user definitions
   ...
   [roles]
   # One or more role definitions

此类还支持设置resourcePath属性以从 .ini 资源创建帐户数据。 仅当 Realm 中还没有帐户数据时才会使用此选项。
在这里插入图片描述
IniRealm()

	/*
	此构造函数将立即处理Ini参数中的定义。 如果你需要在处理之前执行额外的配置(例如设置一个
	permissionResolver等),不要调用这个构造函数。 相反,请执行以下操作:
	调用默认的无参数构造函数
	通过#setIni设置您希望使用的 Ini 实例
	设置任何其他配置属性
	调用init()
	参数:
	ini – 将被检查以为此领域创建帐户、组和权限的 Ini 实例。
	*/
    public IniRealm(Ini ini) {
        this();
        processDefinitions(ini);
    }
    public IniRealm(String resourcePath) {
        this();
        Ini ini = Ini.fromResourcePath(resourcePath);
        this.ini = ini;
        this.resourcePath = resourcePath;
        processDefinitions(ini);
    }

getIni

	/*
	返回用于配置此领域的 Ini 实例。 提供此领域的 JavaBeans 样式配置,在依赖注入环境中特别有用。
	返回:
	将被检查以为此领域创建帐户、组和权限的 Ini 实例
	*/
    public Ini getIni() {
        return ini;
    }

setIni

	/*
	设置用于配置此领域的 Ini 实例。 提供此领域的 JavaBeans 样式配置,在依赖注入环境中特别有用。
	参数:
	ini – 将被检查以为此领域创建帐户、组和权限的 Ini 实例
	*/
    public void setIni(Ini ini) {
        this.ini = ini;
    }

代码测试
user.ini

[users]
Mark=123456,admin
[roles]
admin=user:delete,user:update
package com.shiro.test;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.mgt.DefaultSecurityManager;
import org.apache.shiro.realm.text.IniRealm;
import org.apache.shiro.subject.Subject;
import org.junit.Test;

public class iniRealmTest {

    @Test
    public void testAuthentication(){

        IniRealm iniRealm = new IniRealm("classpath:user.ini");

        //1.构建securityManager环境
        DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();
        defaultSecurityManager.setRealm(iniRealm);

        //2.主体提交认证请求
        SecurityUtils.setSecurityManager(defaultSecurityManager);
        Subject subject = SecurityUtils.getSubject();
        UsernamePasswordToken token = new UsernamePasswordToken("Mark","123456");

        subject.login(token);
        System.out.println(token.getUsername()+" isAuthenticated:"+subject.isAuthenticated());

        subject.checkRole("admin");
        subject.checkPermission("user:update");

        subject.logout();
        System.out.println(token.getUsername()+" isAuthenticated:"+subject.isAuthenticated());

    }

}

测试结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值