2011-04-08 139 views
0

我们有一个使用Spring Security进行LDAP身份验证的自定义Grails应用程序。用户DN包含逗号(例如“CN = Smith \,John,CN = Users,DC = example,DC = com”),但是我们的管理员用户的DN不包含(例如,“CN = peadmin,CN = Users,DC =实施例,DC = COM“)。当我从本质上是Tomcat的Grails服务器运行应用程序时,一切正常。当我构建WAR并部署到WebSphere AS 7时,我只能以管理员用户身份登录。在我们的日志中的异常抱怨一个意外的逗号,它表示应用程序在WAS上运行时没有正确解析/转义DN。Websphere LDAP Spring Security解析错误

升级到Spring Security的3.0.4之后,这里是具体的异常信息,我们得到:

2011-04-07 20:58:41975 [Web容器:0]错误controller.LoginController - org.springframework。 security.authentication.AuthenticationServiceException:解析DN失败;嵌套的例外是org.springframework.ldap.core.ParseException:遇到“”第1行,列20 期待: ...

回答

0

首先,你是在玩火。从来没有将DN作为任何事物的基础,因为它不是用户的稳定属性。即时即时破坏。移动树中的用户。有了AD,你应该使用samAccountName和TDS(以及其余大部分)uid。这不会导致你目前的问题,但如果这是一个真实的应用程序,你希望继续工作,请开始改变的事情,否则你会后悔。其次,如果你坚持在LDAP查询中使用带有逗号的特殊字符,你应该按照RFC 2254来转义它。当Tomcat返回用户时,它会为你做这件事,而不是。