2014-11-21 2 views
3

Я получаю некоторую ошибку, добавляя весеннюю безопасность.Весна безопасности с java config, Без bean с именем «springSecurityFilterChain» определена ошибка

WebInitializer.java

public class WebInitializer extends 
     AbstractAnnotationConfigDispatcherServletInitializer { 

    @Override 
    protected Class<?>[] getRootConfigClasses() { 
     // TODO Auto-generated method stub 
     return new Class<?>[] {ModuleConfig.class}; 
    } 

    @Override 
    protected Class<?>[] getServletConfigClasses() { 
     // TODO Auto-generated method stub 
     return new Class<?>[] {WebConfig.class}; 
    } 

    @Override 
    protected String[] getServletMappings() { 
     // TODO Auto-generated method stub 
     return new String[] {"/"}; 
    } 

    @Override 
    protected Filter[] getServletFilters() { 
     CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter(); 
     characterEncodingFilter.setEncoding("UTF-8"); 
     return new Filter[] { characterEncodingFilter , new HiddenHttpMethodFilter()}; 
    } 


} 

WebConfig.java

@Configuration 
@EnableWebMvc 
@ComponentScan(basePackages = { "com.test" }) 
public class WebConfig extends WebMvcConfigurerAdapter { 


    @Autowired 
    private FormattingConversionService mvcConversionService; 

    @Override 
    public void addViewControllers(ViewControllerRegistry registry) { 
     registry.addViewController("/login").setViewName("login"); 
     registry.setOrder(Ordered.HIGHEST_PRECEDENCE); 
    } 


    @Override 
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
     registry.addResourceHandler("/**").addResourceLocations("/**"); 
    } 


    @Override 
    public void addInterceptors(InterceptorRegistry registry) { 

     LocaleChangeInterceptor localeChangeInterceptor = new LocaleChangeInterceptor(); 
     localeChangeInterceptor.setParamName("lang"); 
     registry.addInterceptor(localeChangeInterceptor); 

    } 

    @Bean 
    public ViewResolver viewResolver() { 

     InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); 
     viewResolver.setViewClass(JstlView.class); 
     viewResolver.setPrefix("/WEB-INF/view/"); 
     viewResolver.setSuffix(".jsp"); 

     return viewResolver; 
    } 

    @Bean 
    public MessageSource messageSource() { 

     ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); 
     messageSource.setBasenames("classpath:messages/messages", 
       "classpath:messages/validation"); 
     // if true, the key of the message will be displayed if the key is not 
     // found, instead of throwing a NoSuchMessageException 
     messageSource.setUseCodeAsDefaultMessage(true); 
     messageSource.setDefaultEncoding("UTF-8"); 
     // # -1 : never reload, 0 always reload 
     messageSource.setCacheSeconds(0); 
     return messageSource; 
    } 
} 

ModulConfig.java

@Configuration 
@ImportResource("classpath:spring/application-config.xml") 
public class ModuleConfig { 

} 

SecurityConfig.java

@Configuration 
@EnableWebMvcSecurity 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

    @Autowired 
    public void registerGlobalAuthentication(
      AuthenticationManagerBuilder auth) throws Exception { 
     auth 
      .inMemoryAuthentication() 
       .withUser("user").password("password").roles("USER"); 

    } 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http 
     .authorizeRequests() 
      .antMatchers("/**").permitAll() 
      .anyRequest().authenticated() 
      .and() 
     .formLogin() 
      .loginPage("/login") 
      .permitAll() 
      .and() 
     .logout()          
      .permitAll().and().csrf().disable(); 
    } 


} 

и ... приложения config.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:jee="http://www.springframework.org/schema/jee" 
    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.xsd 
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd 
    http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd"> 
    <context:component-scan base-package="com.spring.web"/> 

    <jee:jndi-lookup id="dataSource" jndi-name="jdbc/testDB"/> 

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource" /> 
     <property name="mapperLocations" value="classpath*:sql/**/*.xml" /> 
    </bean> 
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> 
     <constructor-arg ref="sqlSessionFactory" /> 
    </bean> 


    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 
     <property name="basePackage" value="com.test" /> 
    </bean> 

</beans> 

, когда я запустить это коды, он показывает эту ошибку.

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:568) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1108) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:278) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198) 
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1121) 
    at org.springframework.web.filter.DelegatingFilterProxy.initDelegate(DelegatingFilterProxy.java:326) 
    at org.springframework.web.filter.DelegatingFilterProxy.initFilterBean(DelegatingFilterProxy.java:236) 
    at org.springframework.web.filter.GenericFilterBean.init(GenericFilterBean.java:194) 
    at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:279) 
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:109) 
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4830) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5510) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1575) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1565) 
    at java.util.concurrent.FutureTask.run(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 

Как это исправить?

+0

Я добавил @ComponentScan в ModulConfig.java. так что теперь исправлено это все. – Jesse

ответ

1

Вы не указали свой файл конфигурации безопасности, поэтому проблема.

Изменить следующую строку:

@Override 
    protected Class<?>[] getServletConfigClasses() { 
     // TODO Auto-generated method stub 
     return new Class<?>[] {WebConfig.class, SecurityConfig.class}; 
    } 

Это должно исправить ее.

Если не дайте мне знать, и я рассмотрю дальше

+0

Я добавил @ComponentScan в ModulConfig.java. так что теперь исправлено это все. Спасибо за ваш комментарий! – Jesse

+0

Да, это потому, что вы не называете класс SecurityConfig, который содержит компонент ComponentScan. Если вы добавите класс, как указано, вам не потребуется дублировать компонент ComponentScan. ваш код действительно делает вызов для аутентификации вообще? – Aeseir

0

В моем случае я построил DaoAuthenticationProvider вручную (в этом advice), и я не звонил setMessageSource().

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