博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Boot中如何启动HTTPS?并将http接口转变为https
阅读量:6880 次
发布时间:2019-06-27

本文共 2672 字,大约阅读时间需要 8 分钟。

转自:http://blog.csdn.net/RO_wsy/article/details/51319963

Spring Boot中启动HTTPS

如果你使用Spring Boot,并且想在内嵌tomcat中添加HTTPS,需要如下步骤

  • 要有一个证书,买的或者自己生成的
  • 在Spring Boot中启动HTTPS
  • 将HTTP重定向到HTTPS(可选)

获取SSL证书

有两种方式

  • 自己通过keytool生成
  • 通过证书授权机构购买

这里作为演示,采用keytool生成

输入下面的命令,根据提示输入信息

keytool -genkey -alias tomcat  -storetype PKCS12 -keyalg RSA -keysize 2048  -keystore keystore.p12 -validity 3650Enter keystore password:Re-enter new password:What is your first and last name?[Unknown]:What is the name of your organizational unit?[Unknown]:What is the name of your organization?[Unknown]:What is the name of your City or Locality?[Unknown]:What is the name of your State or Province?[Unknown]:What is the two-letter country code for this unit?[Unknown]:Is CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown correct?[no]: yes123456789101112131415161718复制代码

会生成一个PKCS12格式的叫做keystore.p12的证书,之后启动Spring Boot时会引用这个证书

Spring Boot 中开启HTTPS

默认情况下Spring Boot内嵌的Tomcat服务器会在8080端口启动HTTP服务,Spring Boot允许在application.properties中配置HTTP或HTTPS,但是不可同时配置,如果两个都启动,至少有一个要以编程的方式配置,Spring Boot官方文档建议在application.properties中配置HTTPS,因为HTTPS比HTTP更复杂一些,可以参考spring-boot-sample-tomcat-multi-connectors的实例

在application.properties中配置HTTPS

server.port: 8443server.ssl.key-store: classpath:keystore.p12server.ssl.key-store-password: mypasswordserver.ssl.keyStoreType: PKCS12server.ssl.keyAlias: tomcat12345复制代码

这就够了

将HTTP请求重定向到HTTPS(可选)

让我们的应用支持HTTP是个好想法,但是需要重定向到HTTPS,上面说了不能同时在application.properties中同时配置两个connector,所以要以编程的方式配置HTTP connector,然后重定向到HTTPS connector

这需要在配置类中配置一个TomcatEmbeddedServletContainerFactory bean,代码如下

@Bean  public EmbeddedServletContainerFactory servletContainer() {    TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() {        @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(8080);    connector.setSecure(false);    connector.setRedirectPort(8443);    return connector;  }1234567891011121314151617181920212223242526272829复制代码

搞定!

相关学习资料移步:

转载于:https://juejin.im/post/5a03a4c451882531d827da7a

你可能感兴趣的文章
oracle-rman-3
查看>>
Pycharm快速复制当前行到下一行Ctrl+D
查看>>
在QT中使用同步阻塞式HTTP请求的方法
查看>>
为了安全,linux下如何使用某个用户启动某个进程?
查看>>
【R】函数-其它实用函数
查看>>
scala分析数据作图
查看>>
This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its de 错误解决办法
查看>>
Linux常用基本命令(less)
查看>>
PostgreSQL各命令行工具功能说明
查看>>
关于后台接收参数为null的问题之ajax--contentType
查看>>
基于IDEA的JavaWeb开发环境搭建
查看>>
JAVA中如何将一个json形式的字符串转为json对象或对象列表
查看>>
Dynamics4.0和Dynamics2011处理Email的方法
查看>>
LeetCode: Regular Expression Matching 解题报告
查看>>
表数据文件DBF的读取和写入操作
查看>>
前后端分离趋势谈
查看>>
指针和引用的区别
查看>>
nyoj259茵茵的第一课
查看>>
不定长内存池之apr_pool
查看>>
二维“有序”数组查找问题的解决
查看>>