我正在研究Spring Security。我有一个从另一个方法调用的方法。被调用的方法应该返回一个包含多个元素的列表,但是我总是发现它只返回列表中的单个元素。
一个例子是:我有 权限:CREATE_EDITOR,EDIT_EDITOR,CREATE_PROFILE,EDIT_PROFILE。
角色:ROLE_EDITOR,ROLE_PROFILE
该权限是第一个创建的权限,在创建ROLES时,它将遍历PERMISSIONS,并仅返回与ROLE匹配的PERMISSIONS。
就像循环在保存角色之前只运行一次。如何保存所有与角色匹配的权限?
返回权限的方法
private List<Permission> myPermissions(Role role ){
List<Permission> permissionArrayList = new ArrayList<Permission>();
permissionArrayList = permissionRepository.findAll();
String myRole = role.getName().split("_")[1];
for (Permission permission: permissionArrayList) {
if ( permission.getName().contains(myRole) ) {
permissionArrayList.clear();
permissionArrayList.add(permission);
return permissionArrayList;
}
}
throw new InternalServerException();
}
保存ROLE的方法
public Role save(Role role) {
Role myRole = new Role();
myRole.setName(role.getName());
myRole.setPermissions(myPermissions(role));
roleRepository.save(myRole);
return myRole;
}
答案 0 :(得分:0)
我不确定您要做什么,但是我发现您的代码有几个问题:
以以下方式修改方法将解决您正在寻求帮助的问题,如果您的save方法运行正常(例如,您应检查返回的权限对象是否为空)。但是,我建议您事后查看需求并重构代码。
private List<Permission> myPermissions(Role role ){
List<Permission> permissions = permissionRepository.findAll();
List<Permission> permissionsToSave = new ArrayList<Permission>();
String myRole = role.getName().split("_")[1];
for (Permission permission: permissions ) {
if ( permissions.getName().contains(myRole) ) {
permissionsToSave.add(permission);
}
}
return permissionsToSave;
}
答案 1 :(得分:0)
我非常感谢@ AR1和@M。 Deinum。最终,我必须将迭代包装在保存(提交)到数据库的main方法中。这种情况的解释是,当迭代方法被分离时,它仅被调用一次,从而只保存了一个匹配的权限对象。
help