【发布时间】:2015-04-14 04:39:06
【问题描述】:
我已经使用基于 Java 的配置配置了我的 Spring 应用程序。当我启动我的应用程序时,我收到错误NoSuchBeanDefinitionException: No bean named 'springSecurityFilterChain' is defined。我已经定义了所有的配置类,但是这个错误仍然发生。我该如何解决这个问题?
我的主要课程:
public class SiteMain implements WebApplicationInitializer {
private void initSpringMvcServlet(ServletContext container) {
AnnotationConfigWebApplicationContext dispatcherContext = new AnnotationConfigWebApplicationContext();
dispatcherContext.register(MvcConfig.class);
ServletRegistration.Dynamic dispatcher = container.addServlet("dispatcher", new DispatcherServlet(dispatcherContext));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
}
private void initSpringRootContext(ServletContext container) {
XmlWebApplicationContext rootContext = new XmlWebApplicationContext();
rootContext.setConfigLocation("/WEB-INF/site.xml");
container.addListener(new ContextLoaderListener(rootContext));
}
@Override
public void onStartup(ServletContext container) throws ServletException {
initSpringRootContext(container);
initSpringMvcServlet(container);
}
}
我的安全初始化器类是:
public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer { }
我的 MVC 配置类是:
@Configuration
@EnableWebMvc
@ComponentScan
@Import(SecurityConfig.class)
public class MvcConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/").setCachePeriod(31556926);
}
}
我的安全配置类是:
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/resources/**").permitAll().anyRequest().authenticated()
.and().formLogin().loginPage("/").permitAll()
.and().logout().permitAll()
.and().rememberMe();
}
}
【问题讨论】:
-
SecurityWebApplicationInitializer 类中到底有什么?
-
而site.xml是什么,里面定义了什么?
-
@NikolaB:我的
SecurityWebApplicationInitializer什么都没有。我所给予的就是一切。site.xml包含一些 bean 和一个数据库事务管理器。 -
为什么不创建配置类并将其命名为 BeanConfig 或类似名称,并在 java 配置中定义 bean 和事务管理器,例如:@Bean public MyBean myBean() { return new MyBean(); } 所以你可以删除 site.xml 并且它应该可以工作。
-
或者您可以删除 initSpringRootContext() 方法并向 MvcConfig 添加注释:@ImportResource({"classpath:/WEB-INF/site.xml"})。根据我之前的修改,它应该可以工作。
标签: spring spring-mvc spring-security