无法使PropertyPlaceholderConfigurer工作

时间:2011-05-25 15:49:31

标签: spring

我正在使用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}

1 个答案:

答案 0 :(得分:6)

我认为您只需要占位符$符号:${ldap.userDN}

这是PropertyPlaceholderConfigurer默认预期的占位符格式。这是通过placeholderPrefixplaceholderSuffix属性控制的;默认情况下,分别为${}