java - 从 Java 应用程序连接到 AD 时出现错误 80004005

标签 java tomcat active-directory com4j

我们有一个由 Apache Tomcat 6 提供的 Java 网络应用程序。我们的用户存储在 Windows 2008 R2 Activity 目录中。 应用程序使用来自 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。

谢谢。亲切的问候。

最佳答案

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

Consider the following scenario:

  • You create a managed service account in a domain.
  • You install the managed service account on a computer that is running Windows 7 or Windows Server 2008 R2.
  • You configure a service to use the managed service account on the computer.

In this scenario, the service starts successfully. However, the managed service account authentication fails after 30 days.

Note The managed service account automatically updates the password every 30 days.

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

关于java - 从 Java 应用程序连接到 AD 时出现错误 80004005,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22326616/

相关文章:

java - 使用不受支持的库,导致我进行类型转换

java - 如何结合Java绘图代码和Java串行代码来读取Arduino传感器值?

java - Android下载管理器保存到/system

tomcat - Liferay 在安装新的 portlet 时给出 "ERROR [PortletRequestProcessor:377] Forward does not exist"

java - GWT 和 Spring 集成

c++ - 通过 IADS 删除 Active Directory 中的对象

java - Java错误: Default constructor cannot handle exception type FileNotFound Exception

java - HTTP 响应 header 中缺少 OK

c# - Active Directory 和 PrimaryPermission

java - 如何修复 Java 中的 Ldap 连接错误 "javax.naming.SizeLimitExceededException: [LDAP: error code 4 - Sizelimit Exceeded]"?