Java LDAP使用'失败&';在密码中。失败不是';但这并不一致

Java LDAP使用'失败&';在密码中。失败不是';但这并不一致,java,active-directory,Java,Active Directory,我有以下问题:如果用户的Active Directory密码包含“&”,则用户无法登录我们的webapp。 我已经在我的本地机器上调试了它,使用一个端口转发到有问题的LDAP服务器,并且一切正常。 但是,如果我在远程服务器上使用该密码登录,就会失败。 我在下面发布了ldap配置的转储。 此外,我们对auth()使用简单文本 任何想法都会受到欢迎,因为我还没有好主意 Hashtable<String, String> environment = new Hashtable<

我有以下问题:如果用户的Active Directory密码包含“&”,则用户无法登录我们的webapp。 我已经在我的本地机器上调试了它,使用一个端口转发到有问题的LDAP服务器,并且一切正常。 但是,如果我在远程服务器上使用该密码登录,就会失败。 我在下面发布了ldap配置的转储。 此外,我们对auth()使用简单文本 任何想法都会受到欢迎,因为我还没有好主意

    Hashtable<String, String> environment = new Hashtable<String, String>();
        environment.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
        environment.put(Context.SECURITY_AUTHENTICATION, "simple");
        environment.put(Context.SECURITY_PRINCIPAL, domainBasedUsername);
        environment.put(Context.SECURITY_CREDENTIALS, password);
        environment.put(Context.PROVIDER_URL, getActiveDirectoryServerUrl())
Hashtable环境=新的Hashtable();
put(Context.INITIAL\u Context\u工厂,“com.sun.jndi.ldap.LdapCtxFactory”);
put(Context.SECURITY_身份验证,“simple”);
environment.put(Context.SECURITY_PRINCIPAL,domainBasedUsername);
环境.put(Context.SECURITY\u凭证、密码);
put(Context.PROVIDER\u URL,getActiveDirectoryServerUrl())
isSynchronized:正确

支持的LDAPVersion:3,2

serverName:CN=ABCDC03,CN=Servers,CN=Foo-City,CN=Sites,CN=Configuration,DC=Foo,DC=com

支持的SASLME机制:GSSAPI、GSS-SPNEGO、外部、摘要-MD5

ldapServiceName:foo.com:abcdc03$@foo.com

命名上下文:DC=foo,DC=com,CN=Configuration,DC=foo,DC=com,CN=Schema,CN=Configuration,DC=foo,DC=com,DC=DomainDnsZones,DC=foo,DC=com,DC=ForestDnsZones,DC=foo,DC=com

域控制器功能:3

支持的LDAppolicies:MaxPoolThreads、MaxDatagramRecv、MaxReceiveBuffer、InitRecvTimeout、MaxConnections、MaxConnIdleTime、MaxPageSize、MaxQueryDuration、MaxTestableSize、MaxResultSetSize、MaxNotificationPerConn、MaxValRange

功能:2

configurationNamingContext:CN=Configuration,DC=foo,DC=com

rootDomainNamingContext:DC=foo,DC=com

SchemaNamingContext:CN=Schema,CN=Configuration,DC=foo,DC=com

子模式:CN=Aggregate,CN=Schema,CN=Configuration,DC=foo,DC=com

支持控制:1.2.2.840.113556.1.1.4.4.319,1.2.840.113556.113556.1.1.1.4.801,1.2.2.840.113556.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.4.801.801.8011,1.1,1.1.2.2.2.840.1.1.840.113556.113556.113556.6.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.113556.1.4.970、1.2.840.113556.1.4.1338、1.2.840.113556.1.4.474、,1.2.840.113556.1.1.4.1340、1.2.1.1.1.1.1.1.1.1.1.1.1.1.1.4.1413、2.2.2.2.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.4.1.1.1.1.4.4.1.1.3.3.3.3.3.3.3.3.3.3.3 3 3 3.3.3.3、2.2.2.2.2.2.1.2.1.2.2.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1 1.1.4.1974、1.2.840.113556.1.4.1341、1.2.840.113556.1.4.2026

最高委员会编号:9122909

域名功能:2

dnsHostName:ABCDC03.foo.com

当前时间:2012010508125.0Z

dsServiceName:CN=NTDS设置,CN=ABCDC03,CN=Servers,CN=Foo City,CN=Sites,CN=Configuration,DC=Foo,DC=com

isGlobalCatalogReady:正确

defaultNamingContext:DC=foo,DC=com


支持的功能:1.2.840.113556.1.4.800、1.2.840.113556.1.4.1670、1.2.840.113556.1.4.1791、1.2.840.113556.1.4.1935

我认为问题可能是通过webapp实际传递密码。密码字段可能需要清理,因为它包含一个符号,在代码中的某个点上可能是一个特殊字符(不确定不同代码块可能使用或不使用什么语言编写)。我遇到过一个类似问题的例子,我用Word编写语句粘贴到Oracle中,但我不小心在Word中使用了制表符,这破坏了Oracle中的一切。

导致失败的字符是&这让我想到,可能在某些密码中,您正在使用它来编写URL。。。只是说,LDAP不是我的强项,但我发现它可疑。问题是密码Strign来自URL编码(假设您以某种形式输入)?纯粹猜测