2014-02-07 3 views
3

У меня есть веб-приложение Spring, которое работает отлично. Я использую JavaConfig, поэтому во всей конфигурации отсутствует лизание XML. Я пытаюсь интегрировать Spring Security, но когда я добавить класс, который расширяет AbstractSecurityWebApplicationInitializer по указанию this tutorial, я получаю следующее исключение:Добавлена ​​Spring Security, теперь я получаю «Нет обнаруженного WebApplicationContext: зарегистрирован ли ContextLoaderListener?»

java.lang.IllegalStateException: No WebApplicationContext found: no ContextLoaderListener registered? 
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:251) 
... 

Любая идея, как я могу решить эту проблему?

+0

ли вы объявляете 'ContextLoaderListener'? –

ответ

5

Возможно, вам необходимо обеспечить загрузку конфигурации безопасности. Если конфигурация безопасности не загружается другими средствами, то AbstractSecurityWebApplicationInitializer должен пройти в конфигурации безопасности для суперкласса, как shown in the guide:

import org.springframework.security.web.context.*; 

public class SecurityWebApplicationInitializer 
     extends AbstractSecurityWebApplicationInitializer { 

    public SecurityWebApplicationInitializer() { 
     super(SecurityConfig.class); 
    } 
} 
+0

, который сделал трюк, но можете ли вы объяснить, почему это не было необходимо в учебнике, на который я ссылался (insecuremvc)? Мое приложение имеет корневой файл конфигурации в базовом пакете с @ ComponentScan, который, как я думал, должен был забрать класс SecurityConfig ... Отличная работа в Spring Security для вас и вашей команды, BTW! – simon

+0

Я понял свою проблему ... Мой 'DispatcherServletInitializer' возвращал' null' из метода 'getRootConfigClasses()', поэтому он не собирал класс SecurityConfig. Еще раз спасибо! – simon

+0

Рад, что вы поняли это :) и спасибо за отзывы о Spring Security! –

1

Я также с той же проблемой после руководства с сайта. Добавление кода в MessageSecurityWebApplicationInitializer.java решило проблему.

public MessageSecurityWebApplicationInitializer() { 
    super(SecurityConfig.class); 
} 
0

Когда я попытался добавить супер (SecurityConfig.class) я не получаю конструктор не по умолчанию найден, и я проверил класс и был конструктор с параметром конфигурации и не по умолчанию, поэтому не удалось. Что-то изменилось в 3.2.6?

org.springframework.beans.factory.BeanCreationException: Ошибка при создании bean-компонента с именем «securityConfig»: не удалось выполнить активацию bean-компонента; Вложенное исключение - org.springframework.beans.BeanInstantiationException: Не удалось создать экземпляр [org.springframework.security.access.SecurityConfig]: конструктор по умолчанию не найден; вложенное исключение составляет java.lang.NoSuchMethodException: org.springframework.security.access.SecurityConfig() в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean (AbstractAutowireCapableBeanFactory.java:1093) на org.springframework.beans. .factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance (AbstractAutowireCapableBeanFactory.java:1038) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:504)

Смежные вопросы