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());
}
}
测试结果