package com; import cn.xuyanwu.spring.file.storage.EnableFileStorage; import org.apache.catalina.connector.Connector; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; import org.springframework.boot.web.servlet.server.ServletWebServerFactory; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.PropertySource; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.security.web.firewall.HttpFirewall; import org.springframework.security.web.firewall.StrictHttpFirewall; import springfox.documentation.swagger2.annotations.EnableSwagger2; /** * @program: itbgpproject * @description: * @author: Mr.Peng * @create: 2020-08-03 14:50 **/ @MapperScan({"com.zhgd.*.*.*.mapper", "com.zhwl.*.*.*.mapper"}) @EnableAsync //开启异步调用 @EnableScheduling @EnableFileStorage //@EnableConfigurationProperties(FileServerProperties.class) //@EnableConfigurationProperties({FileStorageProperties.class}) @PropertySource(value = "classpath:application.properties", encoding = "utf-8") @SpringBootApplication public class WisdomSiteApplication extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(WisdomSiteApplication.class, args); } /** * 项目打成war包部署到外部tomcat运行时需要运行放开 * 本地运行或打jar包注释掉 */ /*@Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(WisdomSiteApplication.class); }*/ @Value("${http.port}") Integer httpPort; //正常启用的https端口 如443 @Value("${server.port}") Integer httpsPort; /*// 如果没有使用默认值80 @Value("${http.port}") Integer httpPort; @Bean public TomcatServletWebServerFactory servletContainer() { TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() { @Override protected void postProcessContext(Context context) { SecurityConstraint securityConstraint = new SecurityConstraint(); securityConstraint.setUserConstraint("CONFIDENTIAL"); SecurityCollection collection = new SecurityCollection(); collection.addPattern("/*"); securityConstraint.addCollection(collection); context.addConstraint(securityConstraint); } }; tomcat.addAdditionalTomcatConnectors(initiateHttpConnector()); return tomcat; } private Connector initiateHttpConnector() { Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol"); connector.setScheme("http"); connector.setPort(httpPort); connector.setSecure(false); connector.setRedirectPort(httpsPort); return connector; }*/ // 这是spring boot 2.0.X版本的 添加这个,上一个就不用添加了 @Bean public ServletWebServerFactory servletContainer() { TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory(); tomcat.addAdditionalTomcatConnectors(createStandardConnector()); // 添加http return tomcat; } /* --------------------请按照自己spring boot版本选择 end--------------------- */ // 配置http private Connector createStandardConnector() { Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol"); connector.setPort(httpPort); return connector; } /*@Bean public WebMvcConfigurerAdapter webMvcConfigurerAdapter(){ WebMvcConfigurerAdapter webMvcConfigurerAdapter = new WebMvcConfigurerAdapter() { @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/document/").setViewName("forward:/document/index.html"); registry.addViewController("/").setViewName("forward:/index.html"); registry.setOrder(Ordered.HIGHEST_PRECEDENCE); super.addViewControllers(registry); } }; return webMvcConfigurerAdapter; }*/ /** * 采用Undertow作为服务器。 * Undertow是一个用java编写的、灵活的、高性能的Web服务器,提供基于NIO的阻塞和非阻塞API,特点: * 非常轻量级,Undertow核心瓶子在1Mb以下。它在运行时也是轻量级的,有一个简单的嵌入式服务器使用少于4Mb的堆空间。 * 支持HTTP升级,允许多个协议通过HTTP端口进行多路复用。 * 提供对Web套接字的全面支持,包括JSR-356支持。 * 提供对Servlet 3.1的支持,包括对嵌入式servlet的支持。还可以在同一部署中混合Servlet和本机Undertow非阻塞处理程序。 * 可以嵌入在应用程序中或独立运行,只需几行代码。 * 通过将处理程序链接在一起来配置Undertow服务器。它可以对各种功能进行配置,方便灵活。 */ /*@Bean public ServletWebServerFactory undertowFactory() { UndertowServletWebServerFactory undertowFactory = new UndertowServletWebServerFactory(); undertowFactory.addBuilderCustomizers((Undertow.Builder builder) -> { builder.addHttpListener(httpPort, "0.0.0.0"); // 开启HTTP2 builder.setServerOption(UndertowOptions.ENABLE_HTTP2, true); }); return undertowFactory; }*/ @Bean public HttpFirewall allowUrlEncodedSlashHttpFirewall() { StrictHttpFirewall firewall = new StrictHttpFirewall(); firewall.setAllowUrlEncodedSlash(true); return firewall; } }