导语
   Https作为一个比较安全的协议,现在已经越来越普及了,特别是在完成小程序或者是公众号开发的时候,https基本上都是刚需了。但是一个HTTPS的证书是比较费钱的事情,个人开发者可以通过云服务商获取免费的一个证书,有效期是一年,可以申请20个。那么在现在SpringBoot火热的时候,在SpringBoot中是如何开启https的配置呢?

HTTPS简介

  首先HTTPS是超文本传输安全协议(HyperText Transfer Protocol Secure)的缩写,HTTPS是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性,这个协议是有Netscape 在1994年的时候提出,并且扩展到互联网上。

  历史上,HTTPS连接经常用于网络上的交易支付和企业信息系统中敏感信息的传输。在2000年到2010年之间HTTPS被广泛开始使用,确保各类型的网页真实,保护账户和保持用户通信,身份和网络浏览的私密性。
  另外的还有一种安全超文本传输协议 S-HTTP,也是HTTP协议的安全传输实现,但是HTTPS的应用广泛,导致了S-HTTP没有得到广泛支持。

开始准备

  首先需要做的事情就是有一个HTTPS的证书,可以从云服务商获取,例如阿里云、腾讯云等,但是在自己做实验的时候,其实并不需要那么麻烦,Java JDK管理工具keytool工具就可以自己创建一个https的证书。
  首先要做的事情就是进入到JAVA_HOME的bin路径下执行如下的命令


keytool -genkey -alias tomcathttps -keyalg RSA -keysize 2048 -keystore /user/local/key.p12 -validity 365

  这条命令含义如下

  • genkey : 表示要创建一个新的密钥
  • alias : 表示keystore 的别名
  • keyalg : 表示使用的加密算法是RSA,一种非对称加密算法
  • keysize : 表示密钥的长度
  • keystore : 表示生成的密钥存放的位置
  • validity : 表示密钥有效时间,单位为天

  执行完成之后就会在指定的路径下面看到一个对应的生成文件,得到这个文件之后整个的生成工作就算做完了。

引入https

  接下来的工作就是将生成的密钥拷贝到对应的resource目录下面,然后在对应的application.properties文件中加入如下的配置

server.ssl.key-store=classpath:key.p12
server.ssl.key-alias=tomcathttps
server.ssl.key-store-password=111111

  配置完成之后,就可以启动Spring Boot的项目了,整个时候如果使用HTTP来访问接口,那么就会看到Bad Request 的提示,这个时候在使用https来访问接口就会看到不安全提示,这个时候就可以点击继续访问进行访问了。因为这里是自己生成的https的证书,它是不被浏览器所认可的,所以就会有这个提示。

请求转发

  在一个Spring Boot的项目中,不能同时支持HTTP和HTTPS两种请求,为了解决这个问题,就需要配置一个请求转发的操作,当用户发起HTTP调用的时候,自动转发到HTTPS上。如下

@Configuration
public class TomcatConfig{@BeanTomcatServletWebServerFactory tomcatServletWebServerFactory(){TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory(){@Overrideprotected void postProcessContext(Context context){SecurityConstraint constraint = new SecurityConstraint();constraint.setUserConstraint("CONFIDENTIAL");SecurityCollection collection = new SecurityCollection();collection.addPattern("/*");constraint.addCollection(collection);context.addConstraint(constraint);}};factory.addAdditionalTomcatConnectors(createTomcatConnector());return factory;}private Connector createTomcatConnector(){Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");connector.setScheme("http");connector.setPort(8081);connector.setSecure(false);connector.setRedirectPosrt(8080);return connector;}}

  通过上面的操作,配置了HTTP的请求端口为8081,所有来自8081的请求,就会被自动重新定向到8080 这个https 的端口上。这样当在去访问HTTP请求的时候,就会自动重定向到https。

总结

  Spring Boot 中加入HTTPS其实还是比较方便的,如果使用Nginx 或者是Tomcat的时候,HTTPS也可以非常方便的进行配置,当从各个云服务厂商申请到https证书之后,都会对其有具体并且详细的教程,一般的情况下按照官方的教程是没有错的,但是也不免出现官方文档Bug。

SpringBoot精通系列-Spring Boot中如何配置Https相关推荐

  1. SpringBoot - Spring Boot 中的配置体系Profile全面解读

    文章目录 Pre Spring Boot 中的配置体系 配置文件与 Profile 主 application.properties 中指定激活的Profile Profile 配置信息只保存在一个文 ...

  2. 在Spring Boot中使用配置元数据来配置您的配置

    Spring Boot 1.3.0中发布了许多更新,但是其中一个对我很突出,因为我以前并不了解此更新,它的状态使其成为一项真正有用的功能(不幸的是,撰写本文时仅在Spring Boot中可用)这个). ...

  3. springboot(三):Spring boot中Redis的使用

    转自www.ityouknow.com spring boot对常用的数据库支持外,对nosql 数据库也进行了封装自动化. redis介绍 Redis是目前业界使用最广泛的内存数据存储.相比memc ...

  4. Spring Boot中自动配置原理以及日志的基本使用

    目录 自动配置原理 日志的基本使用 自动配置原理 自动配置原理: 1. Spring Boot启动时加载主配置类,开启了知道配置功能@EnableAutoConfiguration. 2. @Enab ...

  5. Spring Boot中的高级配置文件管理

    我们都知道Spring Boot中的配置文件管理及其为不同环境配置应用程序时提供的灵活性. 此功能的另一个强大方面是,在任何给定时间,我们都可以拥有多个活动配置文件. 这样做的好处是我们可以将部署环境 ...

  6. Spring Boot中使用时序数据库InfluxDB

    除了最常用的关系数据库和缓存之外,之前我们已经介绍了在Spring Boot中如何配置和使用MongoDB.LDAP这些存储的案例.接下来,我们继续介绍另一种特殊的数据库:时序数据库InfluxDB在 ...

  7. 自定义spring boot的自动配置

    文章目录 添加Maven依赖 创建自定义 Auto-Configuration 添加Class Conditions 添加 bean Conditions Property Conditions Re ...

  8. Spring Bootstrap中具有配置元数据的高级配置

    在简要介绍了配置元数据并涵盖了我之前的文章< 在Spring Boot中使用配置元数据Pimp您的配置>中的基础知识之后,现在该看看如何进一步执行此步骤并进一步自定义配置. 在这篇文章中, ...

  9. Spring Bootstrap中带有配置元数据的高级配置

    在简要介绍了配置元数据并涵盖了我之前的文章< 在Spring Boot中使用配置元数据Pimp您的配置>中的基础知识之后,是时候看看如何进一步执行此步骤并进一步自定义配置了. 在本文中,我 ...

最新文章

  1. 深入解读Python的unittest并拓展HTMLTestRunner
  2. Vue+blockly 制作与自定义美化
  3. Unity5和WebGL移植指南的一些总结
  4. 基础研究到底要基础到什么程度?
  5. 同步异步 阻塞 非阻塞 异步调用 线程队列 协程
  6. 阿里云 云服务器ECS(CentOS 8.0 64位) 安装 MySQL 数据库
  7. C++ Web 编程 CGI公共网关接口(CGI):第一个 CGI 程序
  8. mysql空指针异常处理_mysql 查询空指针异常
  9. 10. Django基础:静态文件
  10. DNF单机从服务器获取信息,dnf单机云服务器
  11. 南京邮电大学MOOC高级程序语言设计(C++)第六章编程题答案
  12. 【自然语言处理】词性标注
  13. html 飘窗链接,飘窗html
  14. IntelliJ IDEA设置豆沙绿背景
  15. Windows11 出现桌面管理器dwm.exe占用内存过高的解决方法
  16. 用户运营 - 活跃度分析
  17. 美食app的UI设计
  18. idea提示“No suitable licenses associated with account balabala”
  19. 初识python之概念认知篇
  20. 【知识兔】六个Excel生成序号技巧,超级大技巧

热门文章

  1. oracle 转 mysql 乱码问题吗_Oracle数据传输MySQL中文编码问题
  2. Silverlight 5 Beta新特性[3]多窗口支持
  3. java多线程之yield
  4. spring boot几个初始配置文件
  5. hdu 5076 最小割灵活运用
  6. android 开发赚钱
  7. LBS移动网络基站定位
  8. 终于解决H3C交换机reset saved-configuration后不能启动的问题
  9. 弹出无边框网页的Javscrpt代码
  10. 个推基于Docker和Kubernetes的微服务实践