Spring XML error: Could not resolve placeholder 'cas.server.host'

12,182

you use placeholders for properties like "${cas.server.host}" which must be defined in a property file and resolved by spring. create a new property file "your.properties" in your classpath and add this into your context:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
    <value>your.properties</value>
</property>
</bean>

your.properties:

cas.server.host=http://localhost/abc

Share:
12,182
Johnathan Smith
Author by

Johnathan Smith

Updated on June 05, 2022

Comments

  • Johnathan Smith
    Johnathan Smith almost 2 years

    I am trying to setup my Spring CAS.XML file but I dont know why the file is not seeing the values I have set in the file:

    Can someone please tell me what I am getting the following error:

    2012-09-10 11:16:00,396 ERROR org.springframework.web.context.ContextLoader - Context initialization failed
    org.springframework.beans.factory.BeanDefinitionStoreException: Invalid bean definition with name 'requestSingleLogoutFilter' defined in ServletContext resource [/WEB-INF/spring/CAS-Local.xml]: Could not resolve placeholder 'cas.server.host'
        at org.springframework.beans.factory.config.PlaceholderConfigurerSupport.doProcessProperties(PlaceholderConfigurerSupport.java:209)
    

    if you look I do have the values setup at the end of the file...

    Here is my CAS-Local.xml file:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
        xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jdbc="http://www.springframework.org/schema/jdbc"
        xmlns:security="http://www.springframework.org/schema/security"
        xmlns:p="http://www.springframework.org/schema/p"
        xmlns:util="http://www.springframework.org/schema/util"
    
        xsi:schemaLocation="http://www.springframework.org/schema/beans 
                                http://www.springframework.org/schema/beans/spring-beans.xsd
                                http://www.springframework.org/schema/context 
                                http://www.springframework.org/schema/context/spring-context-3.1.xsd
                                http://www.springframework.org/schema/tx
                                http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
                                http://www.springframework.org/schema/jdbc
                                http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
                                http://www.springframework.org/schema/security
                                http://www.springframework.org/schema/security/spring-security-3.1.xsd
                                http://www.springframework.org/schema/util 
                                http://www.springframework.org/schema/util/spring-util-3.1.xsd">
    
    
            <security:http entry-point-ref="casEntryPoint"
            use-expressions="true">
            <security:intercept-url pattern="/" access="permitAll" />
    
            <security:intercept-url pattern="/index.jsp"
                access="permitAll" />
            <security:intercept-url pattern="/cas-logout.jsp"
                access="permitAll" />
            <security:intercept-url pattern="/casfailed.jsp"
                access="permitAll" />
    
            <security:intercept-url access="hasRole('ROLE_MEMBER_INQUIRY')"
                pattern="/visit**" />
    
            <security:custom-filter ref="requestSingleLogoutFilter"
                before="LOGOUT_FILTER" />
            <security:custom-filter ref="singleLogoutFilter"
                before="CAS_FILTER" />
            <security:custom-filter ref="casFilter"
                position="CAS_FILTER" />
    
    
            <security:logout logout-success-url="/cas-logout.jsp" />
        </security:http>
    
        <security:authentication-manager alias="authManager">
            <security:authentication-provider
                ref="casAuthProvider" />
        </security:authentication-manager>
    
    
    
        <security:ldap-server id="ldapServer"
            url="ldaps://dvldap01.uftwf.dev:636/dc=uftwf,dc=dev" manager-dn="cn=xxx,dc=uftwf,dc=dev"
            manager-password="xxx" />
    
        <security:ldap-user-service id="userServiceLDAP"
            server-ref="ldapServer" user-search-base="ou=webusers"
            user-search-filter="(uid={0})" group-search-base="ou=groups"
            group-role-attribute="cn" group-search-filter="(uniqueMember={0})"
            role-prefix="ROLE_" />
    
        <!-- This filter handles a Single Logout Request from the CAS Server -->
        <bean id="singleLogoutFilter" class="org.jasig.cas.client.session.SingleSignOutFilter" />
        <!-- This filter redirects to the CAS Server to signal Single Logout should 
            be performed -->
        <bean id="requestSingleLogoutFilter"
            class="org.springframework.security.web.authentication.logout.LogoutFilter"
            p:filterProcessesUrl="/j_spring_cas_security_logout">
            <constructor-arg
                value="https://${cas.server.host}/cas-server-webapp/logout" />
            <constructor-arg>
                <bean
                    class="org.springframework.security.web.authentication.logout.SecurityContextLogoutHandler" />
            </constructor-arg>
        </bean>
    
        <bean id="serviceProperties" class="org.springframework.security.cas.ServiceProperties"
            p:service="http://wcmisdlin07.uftmasterad.org:8080/SchoolVisitLocked/j_spring_cas_security_check"
            p:authenticateAllArtifacts="true" />
    
        <bean id="casEntryPoint"
            class="org.springframework.security.cas.web.CasAuthenticationEntryPoint"
            p:serviceProperties-ref="serviceProperties"
            p:loginUrl="https://6dvews01.uftwf.dev:8443/cas-server-webapp/login" />
    
        <bean id="casFilter"
            class="org.springframework.security.cas.web.CasAuthenticationFilter"
            p:authenticationManager-ref="authManager" p:serviceProperties-ref="serviceProperties"
            p:proxyGrantingTicketStorage-ref="pgtStorage"
            p:proxyReceptorUrl="/j_spring_cas_security_proxyreceptor">
            <property name="authenticationDetailsSource">
                <bean
                    class="org.springframework.security.cas.web.authentication.ServiceAuthenticationDetailsSource" />
            </property>
    
            <property name="authenticationFailureHandler">
                <bean
                    class="org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler"
                    p:defaultFailureUrl="/casfailed.jsp" />
            </property>
    
    
            <property name="authenticationSuccessHandler">
                <bean
                    class="org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler"
                    p:defaultTargetUrl="/visit" />
            </property>
        </bean>
        <!-- NOTE: In a real application you should not use an in memory implementation. 
            You will also want to ensure to clean up expired tickets by calling ProxyGrantingTicketStorage.cleanup() -->
        <bean id="pgtStorage"
            class="org.jasig.cas.client.proxy.ProxyGrantingTicketStorageImpl" />
        <bean id="casAuthProvider"
            class="org.springframework.security.cas.authentication.CasAuthenticationProvider"
            p:serviceProperties-ref="serviceProperties" p:key="casAuthProviderKey">
            <property name="authenticationUserDetailsService">
                <bean
                    class="org.springframework.security.core.userdetails.UserDetailsByNameServiceWrapper">
                    <constructor-arg ref="userServiceLDAP" />
                </bean>
            </property>
    
    
    
            <property name="ticketValidator">
                <bean class="org.jasig.cas.client.validation.Cas20ServiceTicketValidator">
                    <constructor-arg index="0"
                        value="https://6dvews01.uftwf.dev:8443/cas-server-webapp" />
                </bean>
            </property>
        </bean>
    
        <!-- Configuration for the environment can be overriden by system properties -->
        <context:property-placeholder
            system-properties-mode="OVERRIDE" properties-ref="environment" />
    
        <util:properties id="environment">
            <prop key="cas.service.host">wcmisdlin07.uftmasterad.org:8443</prop>
            <prop key="cas.server.host">6dvews01.uftwf.dev:8443</prop>
        </util:properties>
    </beans>
    
  • ElderMael
    ElderMael over 11 years
    He has a property placeholder <!-- Configuration for the environment can be overriden by system properties --> <context:property-placeholder system-properties-mode="OVERRIDE" properties-ref="environment" /> <util:properties id="environment"> <prop key="cas.service.host">wcmisdlin07.uftmasterad.org:8443</pro‌​p> <prop key="cas.server.host">6dvews01.uftwf.dev:8443</prop> </util:properties>
  • Erhan Bagdemir
    Erhan Bagdemir over 11 years
    can you set your logging level to "DEBUG" and confirm that these properties do exist in your context? which version of spring framework are you using ?
  • Johnathan Smith
    Johnathan Smith over 11 years
    thanks for the link.. it was the issue of having two of them setup