package br.gov.servicos.config;
import org.apache.coyote.http11.AbstractHttp11Protocol;
import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
import org.springframework.boot.context.embedded.MimeMappings;
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.CharacterEncodingFilter;
import javax.servlet.Filter;
import static org.apache.commons.lang.StringUtils.join;
@Configuration
public class ServletContainerConfig {
public static final String COMPRESSIBLE_MEDIA_TYPES = join(new String[]{
"text/html",
"text/xml",
"text/plain",
"application/json",
"application/javascript",
"application/x-font-woff",
"text/css"
}, ',');
@Bean
public EmbeddedServletContainerCustomizer servletContainerCustomizer() {
return servletContainer -> {
addMimeMappingsForFonts(servletContainer);
TomcatEmbeddedServletContainerFactory container = (TomcatEmbeddedServletContainerFactory) servletContainer;
container.setRegisterJspServlet(false);
container.addContextCustomizers(customizer -> customizer.addWelcomeFile("index.html"));
container.addConnectorCustomizers(
connector -> {
AbstractHttp11Protocol httpProtocol = (AbstractHttp11Protocol) connector.getProtocolHandler();
httpProtocol.setCompression("on");
httpProtocol.setCompressionMinSize(256);
httpProtocol.setCompressableMimeTypes(COMPRESSIBLE_MEDIA_TYPES);
}
);
};
}
private void addMimeMappingsForFonts(ConfigurableEmbeddedServletContainer servletContainer) {
MimeMappings mappings = new MimeMappings(MimeMappings.DEFAULT);
mappings.add("eot", "application/vnd.ms-fontobject");
mappings.add("ttf", "application/font-sfnt");
mappings.add("otf", "application/font-sfnt");
mappings.add("woff", "application/font-woff");
mappings.add("woff2", "application/font-woff");
servletContainer.setMimeMappings(mappings);
}
@Bean
public Filter characterEncodingFilter() {
CharacterEncodingFilter filter = new CharacterEncodingFilter();
filter.setEncoding("UTF-8");
filter.setForceEncoding(true);
return filter;
}
}