java - 如何在 Spring Boot 中获取 Dispatcher Servlet Initializer 功能

标签 java spring spring-mvc spring-boot

我们正在寻求将我们的项目迁移到 Spring Boot。但是不清楚如何在 Spring Boot 中复制 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};
}

最佳答案

AppConfigWebappConfig 父/子关系可以由 SpringApplicationBuilder 处理,尽管您也可以考虑平面层次结构。

假设您正在全力以赴,并运行一个嵌入式 servlet 容器,您可以将 FiltersServlet 直接注册为 beans。

如果您需要设置诸如 setAsyncSupported 之类的内容,您还可以使用 ServletRegistrationBeanFilterRegistrationBean。最后一个选项是添加一个实现 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

关于java - 如何在 Spring Boot 中获取 Dispatcher Servlet Initializer 功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22869901/

相关文章:

java - 泛型和继承问题

java - Jsoup:对元素组进行排序

mysql - 如何使用 hibernate 将 sql Time 类型映射到 java 类型?

java - Thymeleaf + Spring Boot : Error resolving template

java - 如何让 Spring MVC Controller 延迟加载?

java - 调整子组件 Swing 的大小

java - 如何使用 robovm (libgdx) 添加共享意图?

mysql - 如何通过外键hql排序

java - 如何保证事务服务方法中的行级唯一约束?

java - 从 Rest Controller 返回对象层次结构时如何使用 Spring MVC @JsonView