2016-06-14 54 views
-1

我不知道爲什麼我在啓動我的Spring應用程序時反覆出現此錯誤。這是錯誤的堆棧跟蹤Spring:org.springframework.beans.factory.NoSuchBeanDefinitionException:沒有定義名爲'springSecurityFilterChain'的bean

SEVERE: Exception starting filter springSecurityFilterChain 
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'springSecurityFilterChain' is defined 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:698) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1174) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:283) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:201) 
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1051) 
    at org.springframework.web.filter.DelegatingFilterProxy.initDelegate(DelegatingFilterProxy.java:326) 
    at org.springframework.web.filter.DelegatingFilterProxy.initFilterBean(DelegatingFilterProxy.java:235) 
    at org.springframework.web.filter.GenericFilterBean.init(GenericFilterBean.java:199) 
    at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:279) 
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:260) 
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105) 
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4574) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5193) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

這是我所定義的springsecurityfilterchain

<filter> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <filter-class> 
       org.springframework.web.filter.DelegatingFilterProxy 
    </filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

在一個名爲AppConfig的-security.xml文件我有這個配置我的web.xml文件

<http auto-config="true"> 
     <form-login login-page="/login" default-target-url="/welcome" authentication-failure-url="/login?error" username-parameter="username" password-parameter="password"/> 
     <logout logout-success-url="/login?logout" /> 
    </http> 

EDITTED添加更多的信息

這是我的AppConfig-mvc.xml在那裏我有諸如internalviewresolver和其他類型的配置

<!-- DataSource definition --> 
    <import resource="appconfig-data.xml" /> 


    <!-- added this line of code --> 
    <mvc:annotation-driven/> 
    <mvc:resources mapping="/resources/**" location="/resources/"/> 
    <!-- ends here --> 


    <!-- Mapping Controllers --> 
    <context:annotation-config /> 

    <context:component-scan base-package="com.springfoundation" /> 

    <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
     <property name="basenames"> 
      <list> 
       <value>classpath:validation</value> 
      </list> 
     </property> 
    </bean> 

<!-- removed internal view resolver from this file --> 
<!-- JSP Templates and Pages --> 
    <bean id="jspViewResolver" 
     class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="viewClass" 
      value="org.springframework.web.servlet.view.JstlView" /> 
     <property name="prefix" value="/WEB-INF/jsp/" /> 
     <property name="suffix" value=".jsp" /> 
    </bean> 

的定義,這是我appconf-data.xml文件在那裏我有配置,如數據庫連接

<!-- Configure the data source bean --> 
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
     <property name="driverClassName" value="${jdbc.driverClassName}"/> 
     <property name="url" value="${jdbc.url}"/> 
     <property name="username" value="${jdbc.username}"/> 
     <property name="password" value="${jdbc.password}"/> 
    </bean> 

    <!-- Configure the entity manager factory bean --> 
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="dataSource" ref="dataSource"/> 
     <property name="packagesToScan" value="com.springfoundation.model"/> 
     <property name="jpaVendorAdapter"> 
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/> 
     </property> 
     <property name="jpaProperties"> 
      <props> 
       <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop> 
       <prop key="hibernate.show_sql">true</prop> 
      </props> 
     </property> 
    </bean> 

    <!-- Configure the transaction manager bean --> 
    <bean id="transactionManager" 
      class="org.springframework.orm.jpa.JpaTransactionManager"> 
     <property name="entityManagerFactory" ref="entityManagerFactory"/> 
    </bean> 

    <!-- Enable annotation driven transaction management --> 
    <tx:annotation-driven/> 

    <!-- 
     Configure Spring Data JPA and set the base package of the 
     repository interfaces 
    --> 

    <jpa:repositories base-package="com.springfoundation.repository"/> 

這是我如何導入下資源春文件夾中定義我的配置XML文件到我的web.xml文件,並顯示在我的web.xml文件中完整的內容

<display-name>Spring MVC Application</display-name> 
    <description>This is a template for a simple and informational Login and CRUD WebAPP.</description> 

    <!-- - Location of the XML file that defines the root application context. 
     - Applied by ContextLoaderListener. --> 


    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value> 
      classpath:spring/appconfig-mvc.xml, 
      classpath:spring/appconfig-security.xml, 
      classpath:spring/appconfig-root.xml 
     </param-value> 
    </context-param> 


<!-- 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value> 
      /WEB-INF/appconfig-root.xml 
     </param-value> 
    </context-param> --> 
<!-- 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value> 
      classpath:spring/main-dispatcher-servlet.xml, 
      classpath:spring/spring-security-config.xml 
     </param-value> 
    </context-param> 
--> 




    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <!-- Servlet that dispatch request from Controllers --> 
<!-- 
    <servlet> 
     <servlet-name>springSimple</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>classpath:spring/mvc-dispatcher-servlet.xml</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    --> 

    <servlet> 
     <servlet-name>springSimple</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>classpath:spring/appconfig-mvc.xml</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>springSimple</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 



    <!-- Spring Security --> 

    <filter> 
     <filter-name>springSecurityFilterChain</filter-name> 
     <filter-class> 
        org.springframework.web.filter.DelegatingFilterProxy 
     </filter-class> 
    </filter> 

    <filter-mapping> 
     <filter-name>springSecurityFilterChain</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

    <!-- General Configurations --> 

    <welcome-file-list> 
     <!-- First Page load --> 
     <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 

    <error-page> 
     <!-- No found page --> 
     <error-code>404</error-code> 
     <location>/WEB-INF/jsp/errors/404.jsp</location> 
    </error-page> 

我不知道爲什麼我不斷收到此錯誤。

+0

什麼是加載'appconfig-security.xml'? –

+0

appconfig-root.xml正在加載它,並在web.xml文件中調用appconfig-root.xml – Blaze

+0

Xml不加載XML。哪個類正在加載xml。 –

回答

0

請在applicationContext.xml中添加bean定義,如下所示。

<bean id="springSecurityFilterChain" class="org.springframework.web.filter.DelegatingFilterProxy"/> 
+1

或,,可能是您的xml配置文件,因爲Spring Security未加載..請在web.xml中添加/WEB-INF/spring-security.xml文件路徑。 <的context-param> ​​contextConfigLocation的 /WEB-INF/spring-security.xml,/WEB-INF/applicationContext.xml的

+0

我有這個xml文件appconfig-mvc.xml,appconfig-security.xml和appconfig-data.xml。那麼他們中的哪一個我稱之爲上述bean? – Blaze

+0

我沒有任何文件叫做applicationContext.xml文件 – Blaze

0

請嘗試以下配置springSecurityFilterChain。它爲我工作。注意<init-param>爲contextAttribute

<filter> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
    <init-param> 
     <param-name>contextAttribute</param-name> 
     <param-value>org.springframework.web.servlet.FrameworkServlet.CONTEXT.appServlet</param-value> 
    </init-param> 
</filter> 
+0

嘗試過但它沒有工作 – Blaze

+0

你能粘貼你的完整的web.xml嗎? –

+0

請檢查我的編輯 – Blaze

0

我想你沒有在applicationContext.xml中的bean定義像下面

<bean id="springSecurityFilterChain" class="org.springframework.web.filter.DelegatingFilterProxy"> 
</bean> 

的ApplicationContext是一個XML文件,該文件是所有的bean及其定義的容器。名稱可以是applicationContext.xml以外的任何其他名稱。你的情況可能是appconfig-mvc.xml或appconfig-data.xml。嘗試發佈這兩個xml文件

注意:如果您得到NoSuchBeanDefinitionException,這意味着您尚未創建bean定義。
謝謝!

+0

我有這個xml文件appconfig-mvc.xml,appconfig-security.xml和appconfig-data.xml。那麼他們中的哪一個我稱之爲上述bean? – Blaze

+0

請通過applicationContext.xml確定哪個文件的意思 – Blaze

+0

請檢查編輯。 – programmer

相關問題