2021SC@SDUSC
IniRealm的类继承关系图
1.TextConfigurationRealm
SimpleAccountRealm,它可以用于验证在启动时创建的初始用户、角色和权限对象的基于文本的配置。
每个用户帐户定义指定用户的用户名、密码和角色。 每个角色定义指定一个名称和一个可选的分配权限集合。 可以为用户分配角色,并且可以为角色分配权限。 通过传递关联,每个用户“拥有”他们所有角色的权限。
用户和用户到角色的定义通过setUserDefinitions方法指定,角色到权限的定义通过setRoleDefinitions方法指定。
onInit()
@Override
protected void onInit() {
//将在启动时调用“processDefinitions”
super.onInit();
processDefinitions();
}
setUserDefinitions
//设置一个换行符 (\n) 分隔的字符串,它根据以下格式定义用户到密码和角色的键/值对:
//username = password , role1, role2,...
//以下是这些行的一些示例:
//root = reallyHardToGuessPassword , administrator jsmith = jsmithsPassword , manager,
//engineer, employee abrown = abrownsPassword , qa, employee djones = djonesPassword ,
//qa, contractor guest = guestPassword
//参数:
//userDefinitions – 要解析并转换为 Map.Entry 元素的用户定义
public void setUserDefinitions(String userDefinitions) {
this.userDefinitions = userDefinitions;
}
setRoleDefinitions
/*
设置定义角色到权限定义的换行符 (\n) 分隔字符串。
字符串中的每一行都必须定义一个角色到权限的键/值映射,等号字符表示键/值分隔,如下所示:
rolename = permissionDefinition1 , permissionDefinition2 , ...
其中permissionDefinition是一个任意字符串,但人们必须希望使用符合WildcardPermission格式的字
符串,以便于使用和灵活。 请注意,如果单个权限定义需要在内部以逗号分隔(例如,
printer:5thFloor:print,info ),则需要用双引号 (") 将该定义括起来以避免解析错误(例如,
"printer:5thFloor:print,info" )。
注意:如果您有不需要权限关联的角色,请不要将它们包含在此定义中 - 如果角色尚不存在,只需在
userDefinitions定义角色名称就足以创建该角色。 此属性实际上仅用于配置具有一个或多个分配的权
限的领域。
参数:
roleDefinitions – 要在初始化时解析的角色定义
*/
public void setRoleDefinitions(String roleDefinitions) {
this.roleDefinitions = roleDefinitions;
}
processUserDefinitions
//设置此realm的用户认证信息
protected void processUserDefinitions(Map<String, String> userDefs) {
if (userDefs == null || userDefs.isEmpty()) {
return;
}
for (String username : userDefs.keySet()) {
String value = userDefs.get(username);
String[] passwordAndRolesArray = StringUtils.split(value);
String password = passwordAndRolesArray[0];
SimpleAccount account = getUser(username);
if (account == null) {
account = new SimpleAccount(username, password, getName());
add(account);
}
account.setCredentials(password);
if (passwordAndRolesArray.length > 1) {
for (int i = 1; i < passwordAndRolesArray.length; i++) {
String rolename = passwordAndRolesArray[i];
account.addRole(rolename);
SimpleRole role = getRole(rolename);
if (role != null) {
account.addObjectPermissions(role.getPermissions());
}
}
} else {
account.setRoles(null);
}
}
}