org.springframework.beans.factory.NoSuchBeanDefinitionException: не определен компонент с именем «springSecurityFilterChain»

Я пытаюсь интегрировать Spring Security в свой проект extjs, но столкнулся со следующей ошибкой. Вся трассировка стека.

 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:510)
at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1056)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:274)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1049)
at org.springframework.web.filter.DelegatingFilterProxy.initDelegate(DelegatingFilterProxy.java:217)
at org.springframework.web.filter.DelegatingFilterProxy.initFilterBean(DelegatingFilterProxy.java:145)
at org.springframework.web.filter.GenericFilterBean.init(GenericFilterBean.java:179)
at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:269)
at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:250)
at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:368)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:98)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4211)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4837)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:140)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1028)
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:773)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:140)
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1028)
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:278)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:140)
at org.apache.catalina.core.StandardService.startInternal(StandardService.java:429)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:140)
at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:662)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:140)
at org.apache.catalina.startup.Catalina.start(Catalina.java:592)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:290)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:418)
    Apr 30, 2012 1:05:00 PM org.apache.catalina.core.StandardContext startInternal
    SEVERE: Error filterStart    

Мой web.xml выглядит следующим образом

   <?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>extjs-crud-grid-spring-hibernate</display-name>

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


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


<servlet>
<servlet-name>extjs-crud-grid-spring-hibernate</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
 <param-name>contextConfigLocation</param-name>
     <param-value>
            /WEB-INF/applicationContext.xml
            /WEB-INF/applicationContext-security.xml
     </param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>extjs-crud-grid-spring-hibernate</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>

applicationContext.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:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

<!-- Scans the classpath of this application for @Components to deploy as beans -->
<!-- Annotated controller beans may be defined explicitly, using a standard Spring bean definition in the 
dispatcher's context. However, the @Controller stereotype also allows for autodetection, aligned with Spring 2.5's 
general support for detecting component classes in the classpath and auto-registering bean definitions for them. -->
<context:component-scan base-package="com.loiane" />

<!-- Configures the @Controller programming model -->
<mvc:annotation-driven />

<!-- misc -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
    <property name="suffix" value=".jsp"/>
</bean>

<!-- Configures Hibernate - Database Config -->
<import resource="db-config.xml" />

applicationContext-security.xml

   <?xml version="1.0" encoding="UTF-8"?>

    <beans xmlns="http://www.springframework.org/schema/beans"
xmlns:security="http://www.springframework.org/schema/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans    http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
    http://www.springframework.org/schema/security  http://www.springframework.org/schema/security/spring-security-2.0.xsd">

<security:global-method-security />
<security:http auto-config="false" entry-point-ref="authenticationProcessingFilterEntryPoint">
    <security:intercept-url pattern="/index.jsp" filters="none" />
    <security:intercept-url pattern="/*.action" access="ROLE_USER" />
</security:http>

<bean id="authenticationProcessingFilter" class="com.loiane.security.MyAuthenticationProcessingFilter">
    <security:custom-filter position="AUTHENTICATION_PROCESSING_FILTER" />
    <property name="defaultTargetUrl" value="/index.jsp" />
    <property name="authenticationManager" ref="authenticationManager" />
</bean>

<security:authentication-manager alias="authenticationManager" />

<bean id="authenticationProcessingFilterEntryPoint"
    class="org.springframework.security.ui.webapp.AuthenticationProcessingFilterEntryPoint">
    <property name="loginFormUrl" value="/index.jsp" />
    <property name="forceHttps" value="false" />
</bean>

<!--
Usernames/Passwords are
    rod/koala
    dianne/emu
    scott/wombat
    peter/opal
These passwords are from spring security app example    
-->
<security:authentication-provider>
    <security:password-encoder hash="md5"/>
    <security:user-service>
        <security:user name="options" password="22b5c9accc6e1ba628cedc63a72d57f8" authorities="ROLE_USER" />
    </security:user-service>
</security:authentication-provider>
 </beans>

Я ссылался на другие темы, но без решения. Может кто-нибудь поправить меня, где проблема в конфигурации?

Спасибо за время.

РЕДАКТИРОВАТЬ: новая проблема связана с отображением. Вот мой класс контроллера. У меня есть файл web.xml выше. Я использую SPring Security. Я не могу перейти к main.jsp после успешного входа в систему. Я добавил аннотацию @RequestMapping над методом.

Класс контроллера

      @Controller

открытый класс ContactController расширяет MultiActionController {

private ContactService contactService;

@RequestMapping(value="/contact/main.action")
public ModelAndView main(HttpServletRequest request,
        HttpServletResponse response) throws Exception {

    return new ModelAndView("main.jsp");

}

@RequestMapping(value="/contact/view.action")
public @ResponseBody Map<String,? extends Object> view() throws Exception {

    try{

        List<Contact> contacts = contactService.getContactList();

        return getMap(contacts);

    } catch (Exception e) {

        return getModelMapError("Error retrieving Contacts from database.");
    }
}

@RequestMapping(value="/contact/create.action")
public @ResponseBody Map<String,? extends Object> create(@RequestParam Object data) throws Exception {

    try{
        List<Contact> contacts = contactService.create(data);

        return getMap(contacts);

    } catch (Exception e) {

        return getModelMapError("Error trying to create contact.");
    }
}

person KillABug    schedule 30.04.2012    source источник
comment
Я предполагаю, что у вас есть все ваши зависимости в пути сборки. Попробуйте удалить свой contextConfigLocation из определения сервлета и объявить его как параметр контекста, как в этом примере: static.springsource.org/spring-security/site/   -  person Dani    schedule 30.04.2012
comment
@Dani Спасибо, я решил эту проблему. Но теперь у меня есть другая проблема.WARNING: No mapping found for HTTP request with URI [/extjs-crud-grid-spring-hibernate/main.action] in DispatcherServlet with name 'extjs-crud-grid-spring-hibernate' Не могли бы вы подсказать мне в сопоставлении, где я ошибаюсь? Я добавил свой контроллер в вопрос в качестве редактирования. Любые указатели на хороший учебник, объясняющий Spring Security, также будут полезны. Большое спасибо.   -  person KillABug    schedule 02.05.2012
comment
Это потому, что у вас на самом деле нет сопоставления для /extjs-crud-grid-spring-hibernate/main.action. То, что вы отображаете в этом контроллере, например: /extjs-crud-grid-spring-hibernate/contact/main.action. Поэтому, если вам нужно получить доступ к первому URI, вы должны удалить контакт из контроллера и сопоставить его только с /main.action. Лучшее руководство по Spring Security, которое я могу порекомендовать, находится в книгах Spring: Spring Recipes и Spring Security 3.   -  person Dani    schedule 02.05.2012
comment
@Dani Ооо .. это было глупо. Решил еще раз спасибо. Но можете ли вы предложить какие-либо онлайн-учебники, кроме документов? По крайней мере, книги сразу, я не могу сослаться, кроме Ecopy, если он бесплатный. :П   -  person KillABug    schedule 02.05.2012
comment
Пожалуйста. Я уверен, что это руководство полезно static.springsource.org/spring-security /сайт/tutorial.html. Но если вы действительно хотите узнать о весенней безопасности, я настоятельно рекомендую вам эту книгу.   -  person Dani    schedule 02.05.2012
comment
@Dani Скачал электронную книгу!! :) Обязательно получу книгу!! Спасибо за ссылку и вклад. Можете ли вы добавить свой комментарий в качестве ответа, чтобы я мог закрыть ветку как ответил?? Я не уверен, что это можно сделать для комментария.   -  person KillABug    schedule 02.05.2012
comment
@KillABug Спасибо, я решил это, не могли бы вы подсказать, как вы это решили? Я застрял на той же проблеме за последние пару дней   -  person Milan Desai    schedule 16.09.2020


Ответы (3)


По поводу проблемы с контроллером: у вас фактически нет сопоставления для
/extjs-crud-grid-spring-hibernate/main.action

То, что вы отображаете в этом контроллере, например:
/extjs-crud-grid-spring-hibernate/contact/main.action

Если вам нужен доступ к первому URI, вы должны удалить contact из контроллера и сопоставить его только с /main.action.

Что касается Spring Security, я уверен, что это руководство полезно ( или почти любой, который вы можете найти в гугле), но если вы действительно хотите узнать об этом, я настоятельно рекомендую книги Spring: рецепты Spring и Spring Security 3.

person Dani    schedule 02.05.2012
comment
Ссылка кажется недоступной и/или перенаправляет на создание весеннего проекта. любая альтернатива? - person Milan Desai; 16.09.2020

попробуйте вместо:

 <param-value>
        /WEB-INF/applicationContext.xml
        /WEB-INF/applicationContext-security.xml
 </param-value>

сделать следующее в /WEB-INF/applicationContext.xml:

<import resource="applicationContext-security.xml"/>
person slavov    schedule 25.02.2013

У меня возникла такая же проблема. Я пробовал security:intercept-url pattern="/**" access="ROLE_USER"

Удалите критерии по шаблону, моя проблема решена. Сама безопасность Spring добавляет URL-адрес /spring_security_login и предоставляет страницу входа в систему.

Попробуй...

person Jayant    schedule 10.05.2013
comment
Проблема была решена ранее, и тогда я принял ответ. Я считаю, что вы можете помочь другим, столкнувшимся с проблемой. Спасибо за ответ. - person KillABug; 11.05.2013