嗨,我无法弄清楚如何使用java 7 nio库在Linux操作系统下验证用户是否属于一个或多个组。
有人可以帮我解决这个问题吗?
您可以尝试读取文件/etc/group。
/etc/group
我开发了一个类来轻松查询此文件:
public class UserInfo { public UserInfo() throws FileNotFoundException, IOException { this.group2users = new HashMap<>(); FileReader fileReader = new FileReader(groupsFilePath); BufferedReader groupsReader = new BufferedReader(fileReader); while(groupsReader.ready()) { try { String line = groupsReader.readLine(); String [] tokens = line.split(":"); String groupName = tokens[0]; Set<String> users = group2users.get(groupName); if(users == null) { users = new HashSet<String>(); group2users.put(groupName, users); } if(tokens.length>3) { for(String uStr: tokens[3].split(",")) users.add(uStr); } } catch (Exception e) { continue; } } groupsReader.close(); fileReader.close(); } public boolean belongs2group(String user, String group) { Set<String> groupRef = group2users.get(group); if(groupRef == null) return false; return groupRef.contains(user); } private String groupsFilePath = "/etc/group"; private Map<String, Set<String>> group2users; }
此代码映射/etc/group文件并保留其用户设置的组映射。我仅开发了一种查询方法(belongs2group),但是添加方法以列出所有组和/或所有用户非常容易。
belongs2group
这段代码是使用老式主流java io-api编写的,但我认为它可以轻松地适应nio。让我知道您是否需要我完成此步骤。