[SPRING] 스프링 부트에서 DispatcherServlet Initializer 기능을 얻는 방법
SPRING스프링 부트에서 DispatcherServlet Initializer 기능을 얻는 방법
프로젝트를 스프링 부트로 마이그레이션하려고합니다. 그러나 SpringBoot에서 AbstractAnnotationConfigDispatcherServletInitializer의 기능을 복제하는 방법이 명확하지 않습니까?
public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer
{
@Override
protected Class<?>[] getRootConfigClasses()
{
return new Class<?>[]{AppConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses()
{
return new Class<?>[]{WebappConfig.class};
}
@Override
protected void customizeRegistration(ServletRegistration.Dynamic registration) {
registration.setAsyncSupported(true);
}
@Override
protected String[] getServletMappings()
{
return new String[]{"/"};
}
@Override
protected Filter[] getServletFilters()
{
DelegatingFilterProxy shiroFilter = new DelegatingFilterProxy("shiroFilter");
shiroFilter.setTargetFilterLifecycle(true);
CompositeFilter compositeFilter = new CompositeFilter();
compositeFilter.setFilters(ImmutableList.of(new CorsFilter(),shiroFilter));
return new Filter[]{compositeFilter};
}
}
해결법
-
==============================
1.AppConfig와 WebappConfig의 부모 / 자식 관계는 SpringApplicationBuilder에 의해 처리 될 수있다.
AppConfig와 WebappConfig의 부모 / 자식 관계는 SpringApplicationBuilder에 의해 처리 될 수있다.
전체 JSP로 가고 있으며 임베디드 서블릿 컨테이너를 실행한다고 가정하면 필터와 서블릿을 빈으로 직접 등록 할 수 있습니다.
setAsyncSupported와 같은 것을 설정해야한다면 ServletRegistrationBean과 FilterRegistrationBean을 사용할 수도 있습니다. 마지막 옵션은 org.springframework.boot.context.embedded.ServletContextInitializer를 구현 한 bean을 추가 한 다음 직접 등록하는 것입니다.
이렇게하면 좀 더 나아질 수 있습니다.
@Bean public ServletRegistrationBean dispatcherServlet() { ServletRegistrationBean registration = new ServletRegistrationBean( new DispatcherServlet(), "/"); registration.setAsyncSupported(true); return registration; } @Bean public Filter compositeFilter() { CompositeFilter compositeFilter = new CompositeFilter(); compositeFilter.setFilters(ImmutableList.of(new CorsFilter(), shiroFilter)); return compositeFilter }
또한 참조 설명서 http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-embedded-container에서이 섹션을 살펴보십시오.
-
==============================
2.그럼 Boot Annotation으로 AppInitializer를 표시하는 것만 큼 특별한 것은 없습니다.
그럼 Boot Annotation으로 AppInitializer를 표시하는 것만 큼 특별한 것은 없습니다.
@Configuration @EnableAutoConfiguration @ComponentScan public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { ... }
나는 그것을 시도하지 않았지만 단지 문서를 결합했다.
그리고 SpringBootServletInitializer JavaDocs :
from https://stackoverflow.com/questions/22869901/how-to-get-dispatcherserveletinitializer-functionality-in-spring-boot by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 값 목록을 확인하는 javax.validation? (0) | 2019.06.04 |
---|---|
[SPRING] Spring MVC Rest Services - 스레드 수 (컨트롤러 인스턴스) (0) | 2019.06.03 |
[SPRING] 봄 MVC 최대 절전 모드 인코딩 / 다중 라인 가져 오기 SQL (0) | 2019.06.02 |
[SPRING] utym8 charset과 Thymeleaf (0) | 2019.06.01 |
[SPRING] Log4j2가 Spring 부트 로깅 구현을 찾을 수 없음 (0) | 2019.05.31 |