2012-09-10 52 views
3

我想安裝我的春天CAS.XML文件,但我不知道爲什麼該文件沒有看到我在文件中設置的值:春天的XML錯誤:無法解析佔位符'cas.server.host'

有人能告訴我什麼,我收到以下錯誤:

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) 

如果你看我有在文件末尾的值設置...

這裏是我的CAS-本地.xml文件:

<?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> 

回答

2

您使用像「$ {cas.server.host}」這樣的屬性的佔位符,它必須在屬性文件中定義並在spring中解析。在類路徑中創建一個新的屬性文件 「your.properties」,並添加到您的背景下,這個:

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

your.properties:

cas.server.host = HTTP://本地主機/ ABC

+0

他有一個屬性佔位符<! - 環境的配置可以被系統屬性覆蓋 - > wcmisdlin07.uftmasterad.org:8443 <丙鍵= 「cas.server.host」> 6dvews01.uftwf.dev:8443 ElderMael

+0

可以在設置你的日誌級別爲「DEBUG」並確認這些屬性確實存在於你的上下文中?您使用的是哪個版本的彈簧框架? –

+0

http://stackoverflow.com/questions/4779572/could-not-resolve-placeholder-problem –

相關問題