【问题标题】:Error 80004005 when connecting to AD from Java application从 Java 应用程序连接到 AD 时出现错误 80004005
【发布时间】:2014-03-11 13:05:26
【问题描述】:

我们有一个由 Apache Tomcat 6 提供的 Java Web 应用程序。我们的用户存储在 Windows 2008 R2 活动目录中。 应用程序使用 org.jvnet.com4j.typelibs 库版本 1.0 中的 COM4J 连接到 AD

例如,我们搜索用户属性:

public <T> T getValueFromAD(Filter filter, String atributes, ADObjectMapper<T> mapper, T nullValue)
{
        _Connection con = com4j.typelibs.ado20.ClassFactory.createConnection();
        try
        {

        con.provider("ADsDSOObject");
        con.open("AD-Anon-Search", "", "", -1/*default*/);

        _Command cmd = com4j.typelibs.ado20.ClassFactory.createCommand();
        try
        {
            cmd.activeConnection(con);
            cmd.commandText("<GC://" + this.domain + ">;" + filter.encode() + ";" + atributes + ";SubTree");
            _Recordset rs = cmd.execute(Variant.getMissing(), Variant.getMissing(), -1/*default*/);
            try
            {
                if (rs.eof())
                    return nullValue;
                else
                    return mapper.mapRecordSet(rs);
            }
            finally {
                rs.close();
                rs.dispose();
            }
        }
        finally {
            cmd.dispose();
        }
    }
    finally {
        con.close();
        con.dispose();
        COM4J.cleanUp();
    }
}

这用于查找正确,但有时(不是固定时间),它会停止工作,并且对 AD 的查询会响应如下访问错误:

com4j.ComException: 80004005 Error no especificado : Error no especificado : .\invoke.cpp:517
    at com4j.Wrapper.invoke(Wrapper.java:166)
    at $Proxy108.execute(Unknown Source)
...
Caused by: com4j.ComException: 80004005 Error no especificado : Error no especificado : .\invoke.cpp:517
    at com4j.Native.invoke(Native Method)
    at com4j.StandardComMethod.invoke(StandardComMethod.java:35)
    at com4j.Wrapper$InvocationThunk.call(Wrapper.java:340)
    at com4j.Task.invoke(Task.java:51)
    at com4j.ComThread.run0(ComThread.java:153)
    at com4j.ComThread.run(ComThread.java:134)

com4j.ComException: 80072116 Traducción del nombre: no se puede encontrar el nombre o privilegios insuficientes para ver el nombre. : Traducción del nombre: no se puede encontrar el nombre o privilegios insuficientes para ver el nombre. : .\invoke.cpp:517
    at com4j.Wrapper.invoke(Wrapper.java:166)
    at $Proxy116.set(Unknown Source)
...
Caused by: com4j.ComException: 80072116 Traducción del nombre: no se puede encontrar el nombre o privilegios insuficientes para ver el nombre. : Traducción del nombre: no se puede encontrar el nombre o privilegios insuficientes para ver el nombre. : .\invoke.cpp:517
    at com4j.Native.invoke(Native Method)
    at com4j.StandardComMethod.invoke(StandardComMethod.java:35)
    at com4j.Wrapper$InvocationThunk.call(Wrapper.java:340)
    at com4j.Task.invoke(Task.java:51)
    at com4j.ComThread.run0(ComThread.java:153)
    at com4j.ComThread.run(ComThread.java:134)

任何人都知道这个问题的原因,或者至少知道我们应该怎么做才能找到原因?

我们发现让它再次正常工作的唯一方法是重新启动 tomcat。

谢谢。亲切的问候。

【问题讨论】:

  • 权限不足? 特权不足
  • 用户必须拥有足够的权限才能正常工作。这种情况只是偶尔发生,并且一直失败,直到我们重新启动 tomcat,它再次开始正常工作。
  • 好吧,我想它工作正常。
  • 不,它不能正常工作。我会尝试更好地解释它: 第 1 天:一切正常。第 2 天:工作正常......第 20 天(例如):停止工作,但我之前发布的例外情况;然后我们重新启动tomcat,并开始正常工作。但 X 天后它可能会再次停止工作。

标签: java tomcat active-directory com4j


【解决方案1】:

终于,我们找到了问题所在。是由微软http://support.microsoft.com/kb/2494158绘制的场景引起的:

考虑以下场景:

  • 您在域中创建托管服务帐户。
  • 您在运行 Windows 7 或 Windows Server 2008 R2 的计算机上安装托管服务帐户。
  • 您将服务配置为使用计算机上的托管服务帐户。

在这种情况下,服务启动成功。然而 托管服务帐户身份验证在 30 天后失败。

注意托管服务帐户自动更新密码 每 30 天一次。

这正是我们的问题,因此应用网络中描述的修补程序解决了问题。希望这可以帮助其他人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-07
    • 2020-03-24
    • 1970-01-01
    • 2013-11-14
    • 2022-12-03
    • 1970-01-01
    • 2017-05-22
    • 2023-02-20
    相关资源
    最近更新 更多