将Java UserPrincipal映射到Active Directory用户
我正在用Java访问远程服务器。服务器运行Microsoft Windows并提供Active Directory和文件系统共享。我通过JNDI从Active Directory读取用户和组,这非常有效。我获得了所有用户属性,比如将Java UserPrincipal映射到Active Directory用户,java,jndi,nio2,Java,Jndi,Nio2,我正在用Java访问远程服务器。服务器运行Microsoft Windows并提供Active Directory和文件系统共享。我通过JNDI从Active Directory读取用户和组,这非常有效。我获得了所有用户属性,比如discrimitedName,objectSid等等 我的Java程序还使用Java7和NIO.2连接到同一服务器上的Windows共享。我可以读取远程文件系统并获取有关它的信息。我还可以读取如下文件权限设置: import java.nio.file.Fil
discrimitedName
,objectSid
等等
我的Java程序还使用Java7和NIO.2连接到同一服务器上的Windows共享。我可以读取远程文件系统并获取有关它的信息。我还可以读取如下文件权限设置:
import java.nio.file.Files;
import java.nio.file.attribute.AclEntry;
import java.nio.file.attribute.AclFileAttributeView;
import java.nio.file.attribute.UserPrincipal;
[...]
AclFileAttributeView aclView = Files.getFileAttributeView(path, AclFileAttributeView.class);
for (AclEntry aclEntry : aclView.getAcl()) {
UserPrincipal principal = aclEntry.principal();
[...]
}
这样我就获得了UserPrincipal
对象的访问权限。此类仅提供一个方法getName()
,该方法返回一些名称,有时返回SID
对于实际用户,UserPrincipal
对象返回一个SID,我可以使用它在Active Directory中查找相应的用户。但是,如果UserPrincipal
表示一个组,getName()
只返回一个文本,例如“vorfineiert\Administratoren”
我找不到将此文本映射到Active Directory中定义的组的方法。AD中的相应组具有以下属性:distrignizedName
:CN=Administratoren,CN=Builtin,DC=mydomain,DC=com
运行Java程序的机器和服务器都运行德语版本的Windows。奇怪的是,AD返回CN=Builtin
(英语),但文件系统返回的组名带有德语翻译vordiniert
。如果两者都是,例如,Builtin
,我可能会解析UserPrincipal
,并找出AD对象的区分名称应该是什么。。。然而,这种方法似乎并不十分可靠
我非常希望能够读取所有UserPrincipal
对象的SID,以便在AD中找到相应的用户或组
有办法做到这一点吗?如果你需要更多信息,请告诉我
致以最良好的祝愿,
天空我继续研究这个问题,并找到了解决方案:
在这种情况下(访问Windows共享),acentry.principal()
返回的对象实际上属于类WindowsUserPrincipals.Group
或WindowsUserPrincipals.User
UserPrincipal
是由WindowsUserPrinciples.User
实现的接口。和WindowsUserPrinciples.Group
是WindowsUserPrinciples.User
的子类
类sun.nio.fs.WindowsUserPrinciples
不是公共的,因此无法直接访问。但是我看到内部类WindowsUserPrinciples.User
正好包含我一直在寻找的SID。它位于名为sidString
的私有字段中
因此,我的解决方案是检查返回的UserPrincipal
是否是WindowsUserPrincipal
,如果是,则使用反射读取字段sidString
的值
它可以工作,并且可以以可靠的方式编写,但是,它不是一个真正超级好的解决方案,因为我必须使用反射。但是我没有找到一个更容易的方法来访问或获取SID
如果您知道更好的读取SID的方法,请仍然回答此问题。谢谢。你好,天空!我正在研究实现类似于您所做的事情的方法,我想知道您的实现在两年后是否仍然有效?也许您找到了更可靠的方法来将广告用户/组与AclFileAttributeView中的用户/组进行匹配?@VolodymyrKrupach是的,它工作可靠,并且已经在生产环境中使用了大约2年,没有任何问题。看到它工作得很好,我没有得到任何进一步的意见,我没有进一步研究这个话题,因此也没有找到任何其他方法。