2012-01-05 91 views
2

我有以下问题:如果用户的Active Directory密码包含'&',用户将无法登录到我们的Web应用程序。 我在我的本地机器上使用端口转发到有问题的LDAP服务器进行调试,并且一切正常。 但是,如果我在远程服务器上使用该密码登录,则会失败。 我已经发布了下面的ldap配置转储。 此外,我们使用简单的文本的身份验证(!) 任何想法都会受到欢迎,因为我刚刚从好想法。LDAP在密码中使用'&'失败。失败并不一致,但

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()) 

isSynchronized:TRUE

supportedLDAPVersion:3,2

服务器名称:CN = ABCDC03,CN =服务器,CN =富城,CN =站点,CN =配置,DC = FOO ,DC = COM

中supportedSASLMechanisms:GSSAPI,GSS-SPNEGO,EXTERNAL DIGEST-MD5

ldapServiceName:foo.com:[email protected]

namingContexts: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

domainControllerFunctionality:3

supportedLDAPPolicies:MaxPoolThreads,MaxDatagramRecv,MaxReceiveBuffer,InitRecvTimeout,MaxConnections最大,MaxConnIdleTime,maxpagesize可,MaxQueryDuration,MaxTempTableSize,MaxResultSetSize,MaxNotificationPerConn,MaxValRange

forestFunctionality:2

configurationNamingContext:CN =配置,DC = FOO,DC = COM

rootDomainNamingContext:DC = FOO,DC = COM

SchemaNamingContext:CN =架构,CN =配置,DC = FOO,DC = COM

subschemaSubentry:CN =骨料,CN =架构,CN =配置,DC = FOO,DC = COM

supportedControl:1.2.840.113556.1.4.319,1.2.840.113556.1.4.801,1.2.840.113556.1.4 .473,1.2.840.113556.1.4.528,1.2.840.113556.1.4.417,1.2.840.113556.1.4.619,1.2.840.113556.1.4.841,1.2.840.113556.1.4.529,1.2.840.113556.1.4.805 ,1.2.840.113556.1.4.521,1.2.840.11 3556.1.4.970,1.2.840.113556.1.4.1338,1.2.840.113556.1.4.474,1.2.840.113556.1.4.1339,1.2.840.113556.1.4.1340,1.2.840.113556.1.4.1413,2.16.840.1.113730.3。 4.9,2.16.840.1.113730.3.4.10,1.2.840.113556.1.4.1504,1.2.840.113556.1.4.1852,1.2.840.113556.1.4.802,1.2.840.113556.1.4.1907,1.2.840.113556.1.4.1948, 1.2.840.113556.1.4.1974,1.2.840.113556.1.4.1341,1.2.840.113556.1.4.2026

highestCommittedUSN:9122909

domainFunctionality:2

DNSHOSTNAME:ABCDC03.foo.com

currentTime:20120105081254。0Z

dsServiceName:CN = NTDS设置,CN = ABCDC03,CN =服务器,CN =富城,CN =站点,CN =配置,DC = FOO,DC = COM

isGlobalCatalogReady:TRUE

defaultNamingContext:DC = FOO,DC = COM

supportedCapabilities: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

+0

事实上,导致失败的字符是&让我想,也许在你使用它来编写一个URL的一些密码......只是说,LDAP不是我的强项,但我觉得它可疑 – SJuan76 2012-01-05 12:39:51

+0

难道问题是密码Strign带有URL编码(假设你以某种形式输入)?纯粹的猜测 – 2012-01-05 12:53:57

回答

1

我认为这个问题可能是通过webapp实际传递密码。密码字段可能需要消毒,因为它包含一个&符号,它可能是代码中某个特殊字符(不知道您的不同代码块可能写入或不写入哪种语言)。我有一个类似问题的例子,我在Word中写了一些语句来粘贴到Oracle中,但是我意外地在Word中使用了TAB,这在Oracle中打破了一切。