This question already has answers here:
Check group membership for a Linux user using Java
(2个答案)
2年前关闭。
在DB2中的存储过程中,我需要查找有关用户组的信息。 DB2对此没有内置功能,因此似乎我需要为此编写一个用户定义的函数或用户定义的过程。实际上,必须使用Java编写。
因此,在Java中:从操作系统的角度来看,如何查询用户所属的组?或者:给定组名,获取组成员用户名列表。
该方法必须在Linux上有效(如果它与操作系统无关,那会很好,但这并不重要)。
该方法必须遵守操作系统中配置的任何授权集成。换句话说:如果已将操作系统设置为使用SSSD进行用户授权,则Java代码不应依赖于能够在/ etc / group中找到组成员身份。
因此,我希望能够从Java执行与Linux外壳程序命令“ id USERNAME”或“ getent group GROUPNAME”相同的操作。 Python具有用于此类任务的“ grp”模块,但是我还没有找到与Java类似的东西。
优选地,该解决方案应该依赖于尽可能少的外部库。如果它仅依赖于合理的现代JRE一部分的API,那将是最好的。
(2个答案)
2年前关闭。
在DB2中的存储过程中,我需要查找有关用户组的信息。 DB2对此没有内置功能,因此似乎我需要为此编写一个用户定义的函数或用户定义的过程。实际上,必须使用Java编写。
因此,在Java中:从操作系统的角度来看,如何查询用户所属的组?或者:给定组名,获取组成员用户名列表。
该方法必须在Linux上有效(如果它与操作系统无关,那会很好,但这并不重要)。
该方法必须遵守操作系统中配置的任何授权集成。换句话说:如果已将操作系统设置为使用SSSD进行用户授权,则Java代码不应依赖于能够在/ etc / group中找到组成员身份。
因此,我希望能够从Java执行与Linux外壳程序命令“ id USERNAME”或“ getent group GROUPNAME”相同的操作。 Python具有用于此类任务的“ grp”模块,但是我还没有找到与Java类似的东西。
优选地,该解决方案应该依赖于尽可能少的外部库。如果它仅依赖于合理的现代JRE一部分的API,那将是最好的。
最佳答案
在Java中,没有“干净的”方法可以做到这一点。 Java没有用于枚举用户组的任何标准API。您的选择将是:
实现一个调用getgroups
C库方法的本机库包装器,然后通过JNI或JNA从Java调用它
使用java.lang.Process调用外部程序以获取信息
从Java查询LDAP或Kerberos / AD或JNDI
仅当系统使用LDAP / Kerberos / JNDI并且您具有适当的凭据,架构配置等时,最后一个才有效。这些使这可能是最困难的方法……并且实际上与其他方法一样不可移植。