복붙노트

[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. ==============================

    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. ==============================

    2.그럼 Boot Annotation으로 AppInitializer를 표시하는 것만 큼 특별한 것은 없습니다.

    그럼 Boot Annotation으로 AppInitializer를 표시하는 것만 큼 특별한 것은 없습니다.

    @Configuration
    @EnableAutoConfiguration
    @ComponentScan
    public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    ...
    }
    

    나는 그것을 시도하지 않았지만 단지 문서를 결합했다.

    그리고 SpringBootServletInitializer JavaDocs :

  3. from https://stackoverflow.com/questions/22869901/how-to-get-dispatcherserveletinitializer-functionality-in-spring-boot by cc-by-sa and MIT license