我正在使用LDAP对Web应用程序中的用户进行身份验证。 LDAP相关bean在名为spring-servlet-security-ldap.xml
的单独文件中配置(现在称为ldap.xml
)。我的主Web应用程序上下文文件'spring-servlet.xml'导入spring-servlet-security.xml
,它再次导入ldap文件。如果我不使用属性文件,则此设置有效。
我已经包含了层次结构详细信息,因为类似的问题网站PropertyPlaceholderConfigurer
被覆盖了。
ldap设置的属性文件放在WEB-INF
目录中。
我已在PropertyPlaceholderConfigurer
中定义了ldap.xml
,如下所示
<bean id="placeHolderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location"><value>WEB-INF/ldap.properties</value></property>
</bean>
我在同一个文件中引用属性
<bean id="contextSource" class="org.springframework.security.ldap.DefaultSpringSecurityContextSource" depends-on="placeHolderConfigurer">
<constructor-arg value="ldap://xx.xx.xx.xx:389/dc=example,dc=com" />
<property name="userDn"><value>{ldap.userDN}</value></property>
<property name="password" value="secret" />
</bean>
日志表明正在加载该属性。
INFO Thread-0 org.springframework.beans.factory.config.PropertyPlaceholderConfigurer - Loading properties file from ServletContext resource [/WEB-INF/ldap.properties]
但是没有为该值引用属性文件,并且正在使用字面配置的值。我已经从数据包跟踪中验证了绑定请求是针对DN {ldap.userDN}
。
答案 0 :(得分:6)
我认为您只需要占位符$
符号:${ldap.userDN}
。
这是PropertyPlaceholderConfigurer
默认预期的占位符格式。这是通过placeholderPrefix
和placeholderSuffix
属性控制的;默认情况下,分别为${
和}
。