Aucun bean nommé 'springSecurityFilterChain' est une erreur définie avec javaconfig
Je vais avoir quelques problèmes ajout de printemps de sécurité. Il affiche une erreur qui dit:Pas de bean nommé "springSecurityFilterChain" est défini
public class WebInitializer implements WebApplicationInitializer {
public void onStartup(ServletContext servletContext) throws ServletException {
//Create the 'root' Spring application context
AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
rootContext.register(App.class);
servletContext.addListener(new ContextLoaderListener(rootContext));
//security filter
servletContext.addFilter(
"springSecurityFilterChain",
new DelegatingFilterProxy("springSecurityFilterChain"))
.addMappingForUrlPatterns(null, false, "/*");
//Manage the lifecycle of the root application context
AnnotationConfigWebApplicationContext webContext = new AnnotationConfigWebApplicationContext();
webContext.register(WebConfig.class);
webContext.setServletContext(servletContext);
ServletRegistration.Dynamic servlet = servletContext.addServlet("dispatcher", new DispatcherServlet(webContext));
servlet.addMapping("/");
servlet.setLoadOnStartup(1);
}
}
Dans le moment où j'ai ajouter le filtre de sécurité, il affiche ce message d'erreur. J'ai été comme un fou en essayant de résoudre ce sans succès.
C'est mon WebSecurityConfigurerAdapter
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().withUser("tom").password("123456").roles("USER");
auth.inMemoryAuthentication().withUser("bill").password("123456").roles("ADMIN");
auth.inMemoryAuthentication().withUser("james").password("123456").roles("SUPERADMIN");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/signin").access("hasRole('ROLE_ADMIN')")
.and().formLogin();
}
}
WebConfig
@Configuration
@EnableWebMvc
@ComponentScan(value = {"com.hp.visitor.controller"})
@Import({ WebSecurityConfig.class })
public class WebConfig extends WebMvcConfigurerAdapter {
@Bean
UrlBasedViewResolver setupViewResolver(){
UrlBasedViewResolver resolver = new UrlBasedViewResolver();
resolver.setPrefix("/");
resolver.setSuffix(".jsp");
resolver.setViewClass(JstlView.class);
return resolver;
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**").addResourceLocations("/static/");
}
}
J'ai essayé beaucoup de choses, mais il indique toujours une erreur 503.
Comment puis-je résoudre ce problème?
source d'informationauteur Carlos López | 2014-05-09
Vous devez vous connecter pour publier un commentaire.
Essayez d'inscrire le filtre de sécurité de cette façon
Et ajouter le
@Import({WebSecurityConfig.class})
dans la configuration de la classe, vous déclarez que votre rootContext dans WebInitializer dans votre cas est en App.javaIl vous suffit de créer une classe qui étend la classe de AbstractSecurityWebApplicationInitializer et il va automatiquement créer/initialiser le filtre de sécurité de la chaîne pour vous. Pas de code requis:
Aussi, si vous êtes seulement la création d'un répartiteur unique servlet, vous pourriez envisager de simplement prolonger votre WebAppIntializer classe de AbstractAnnotationConfigDispatcherservletinitializer:
Vous n'avez pas réellement besoin d'ajouter le filtre de sécurité manuellement. Vous pouvez étendre
AbstractSecurityWebApplicationInitializer
qui vient s'insérer le filtre. Vous n'avez pas besoin d'ajouter du code supplémentaire que ce qui est dans l'exemple ci-dessous:En général, je vais avoir mon App de Sécurité de l'Initialiseur avec
@Order(1)
et le standard Web App Initialiseur avec@Order(2)
.Vous devez également vous assurer que votre composant de balayage est réglé correctement. J'ai eu il pointe vers un mauvais package et j'ai obtenu cette erreur avant.