[SPRING] javacfig에서 'springSecurityFilterChain'이라는 Bean이 정의되지 않았습니다.
SPRINGjavacfig에서 'springSecurityFilterChain'이라는 Bean이 정의되지 않았습니다.
스프링 보안을 추가하는 데 문제가 있습니다. 'springSecurityFilterChain'이라는 bean을 정의하지 않았습니다.
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);
}
}
보안 필터를 추가하는 순간이 오류가 표시됩니다. 나는 이것을 성공적으로 해결하려고 미친 듯이 노력했다.
이것은 내 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/");
}
}
나는 많은 노력을했지만 항상 503 오류를 보여줍니다.
어떻게 해결할 수 있습니까?
해결법
-
==============================
1.이 방법으로 보안 필터를 등록 해보십시오.
이 방법으로 보안 필터를 등록 해보십시오.
FilterRegistration.Dynamic securityFilter = servletContext.addFilter("springSecurityFilterChain", DelegatingFilterProxy.class); securityFilter.addMappingForUrlPatterns(null, false, "/*");
귀하의 경우에 WebInitializer의 rootContext가 App.java에 있음을 선언하는 구성 클래스에 @Import ({WebSecurityConfig.class})를 추가하십시오
-
==============================
2.AbstractSecurityWebApplicationInitializer에서 확장되는 클래스를 만들면 보안 필터 체인을 자동으로 만들고 초기화합니다. 코드 필요 없음 :
AbstractSecurityWebApplicationInitializer에서 확장되는 클래스를 만들면 보안 필터 체인을 자동으로 만들고 초기화합니다. 코드 필요 없음 :
public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer {}
또한 단일 디스패처 서블릿 만 작성하는 경우 AbstractAnnotationConfigDispatcherServletInitializer에서 WebAppIntializer 클래스를 확장하는 것을 고려할 수 있습니다.
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class<?>[] getRootConfigClasses() { return new Class[]{WebSecurityConfig.class, App.class}; } @Override protected Class<?>[] getServletConfigClasses() { return new Class[]{WebConfig.class}; } @Override protected String[] getServletMappings() { return new String[]{ "/" }; }
-
==============================
3.실제로 보안 필터를 수동으로 추가 할 필요는 없습니다. AbstractSecurityWebApplicationInitializer를 확장하면 필터를 삽입 할 수 있습니다. 아래 예제의 코드보다 코드를 추가 할 필요가 없습니다.
실제로 보안 필터를 수동으로 추가 할 필요는 없습니다. AbstractSecurityWebApplicationInitializer를 확장하면 필터를 삽입 할 수 있습니다. 아래 예제의 코드보다 코드를 추가 할 필요가 없습니다.
package com.example.spring.security.config; import org.springframework.core.annotation.Order; import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer; @Order(1) public class SecurityWebAppInitializer extends AbstractSecurityWebApplicationInitializer { }
일반적으로 @Order (1)로 보안 앱 초기화 프로그램을, @Order (2)에 표준 웹 앱 초기화 프로그램을 제공합니다.
또한 구성 요소 검사가 올바르게 설정되어 있는지 확인해야합니다. 잘못된 패키지를 가리키며이 오류가 발생했습니다.
from https://stackoverflow.com/questions/23572516/no-bean-named-springsecurityfilterchain-is-defined-error-with-javaconfig by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 데이터 JPA : 모델을 우아하게 업데이트하는 방법은 무엇입니까? (0) | 2019.02.11 |
---|---|
[SPRING] JPA가 트랜잭션을 롤백하는 것을 방지하는 방법은 무엇입니까? (0) | 2019.02.11 |
[SPRING] MaxUploadSizeExceededException은 Spring에서 예외 처리 메소드를 호출하지 않습니다. (0) | 2019.02.10 |
[SPRING] Spring Controller에서 브라우저의 CSV 데이터를 반환하는 방법 (0) | 2019.02.10 |
[SPRING] MongoDB와의 ZonedDateTime (0) | 2019.02.10 |