查询Active Directory

时间:2016-07-26 23:19:08

标签: java active-directory

我想在没有用户输入凭据的情况下针对Active Directory查询用户凭据。即用户登录到他的公司系统(Intranetwork)我需要使用这些凭据来验证AD,并在用户存在时检索他的电子邮件地址。(不需要单点登录)

1 个答案:

答案 0 :(得分:1)

当然,回答为时已晚,但......像我这样的人可以搜索相同的答案......

我不确定您为什么需要验证用户凭据? 如果用户已登录,则验证凭据。

使用Windows PowerShell可以获取他的电子邮件(以及来自AD的其他信息)。

public class TestWindowsAD {

public static void main(String... args) throws Exception {

    System.out.println("Current user e-mail: " + getCurrentUserEmail());

}

private static String getCurrentUserEmail() {

    String cmd = "powershell \"Add-Type -AssemblyName System.DirectoryServices.AccountManagement;[System.DirectoryServices.AccountManagement.UserPrincipal]::Current.EmailAddress;\"";
    String userEmail = "";
    if (!System.getProperty("os.name").toLowerCase().startsWith("win")) { throw new RuntimeException(
            "We are not in Windows! OS is " + System.getProperty("os.name")); }
    Runtime rt = Runtime.getRuntime();
    Process pr;
    try {
        pr = rt.exec(cmd);
        pr.waitFor();
        BufferedReader bf = new BufferedReader(new InputStreamReader(pr.getInputStream()));
        String nextLine = null;

        while (true) {
            nextLine = bf.readLine();
            if (nextLine == null) break;
            userEmail = nextLine;
        }
        bf.close();
    } catch (Exception e) {
        System.err.println("Failed to get user email: " + e.getMessage());
        throw new RuntimeException(e);
    }

    return userEmail;
}

P.S。如果您需要更多信息,请在命令提示符下运行:

powershell "Add-Type -AssemblyName System.DirectoryServices.AccountManagement;[System.DirectoryServices.AccountManagement.UserPrincipal]::Current"

并选择你需要的东西。