SpringBoot同时使用HTTP和HTTPS

1,301 阅读1分钟

默认情况下,springboot配置了https之后就无法再使用http了,但是我们开发测试阶段可能就是需要使项目同时支持http和https,这时候就需要对项目做一些额外配置了。这一小节的内容主要就是介绍一下SpringBoot的项目如何同时支持http和https。

配置https

配置https需要先生成证书,关于如何生成证书可以参考另一篇文章springboot设置自签名https证书,证书生成了之后将证书导入到resources目录下,然后配置application.properties

server.port=8080
#证书的路径.
server.ssl.key-store=src/main/resources/ssl-key.p12
#证书密码,请修改为您自己证书的密码.
server.ssl.key-store-password=***
#秘钥库类型
server.ssl.keyStoreType=PKCS12
#证书别名
server.ssl.keyAlias=sslserver

启动项目,使用ApiFox或者postman请求接口地址。

配置http

配置完了https之后再看一下如何同时支持http,配置也是比较简单的,需要在启动类上做一些处理。

@SpringBootApplication
class ShiciApplication{

    private val port: Int = 8081

    @Bean
    fun servletContainer(): ServletWebServerFactory? {
        val tomcat = TomcatServletWebServerFactory()
        // 配置http
        val connector = Connector("org.apache.coyote.http11.Http11NioProtocol")
        connector.port=port
        tomcat.addAdditionalTomcatConnectors(connector) // 添加http
        return tomcat
    }

}
fun main(args: Array<String>) {

    runApplication<ShiciApplication>(*args)
}

需要注意的是,这里配置的端口号不能和配置文件填的端口号一样,因为配置文件里写的是https的端口号,这里配置的是http端口号,如果端口号相同会导致项目启动失败。

访问接口

使用http访问接口 http://127.0.0.1:8081/shici/all
使用https访问接口 https://127.0.0.1:8080/shici/all