SpringBoot精通系列-Spring Boot中如何配置Https
导语
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相关推荐
- SpringBoot - Spring Boot 中的配置体系Profile全面解读
文章目录 Pre Spring Boot 中的配置体系 配置文件与 Profile 主 application.properties 中指定激活的Profile Profile 配置信息只保存在一个文 ...
- 在Spring Boot中使用配置元数据来配置您的配置
Spring Boot 1.3.0中发布了许多更新,但是其中一个对我很突出,因为我以前并不了解此更新,它的状态使其成为一项真正有用的功能(不幸的是,撰写本文时仅在Spring Boot中可用)这个). ...
- springboot(三):Spring boot中Redis的使用
转自www.ityouknow.com spring boot对常用的数据库支持外,对nosql 数据库也进行了封装自动化. redis介绍 Redis是目前业界使用最广泛的内存数据存储.相比memc ...
- Spring Boot中自动配置原理以及日志的基本使用
目录 自动配置原理 日志的基本使用 自动配置原理 自动配置原理: 1. Spring Boot启动时加载主配置类,开启了知道配置功能@EnableAutoConfiguration. 2. @Enab ...
- Spring Boot中的高级配置文件管理
我们都知道Spring Boot中的配置文件管理及其为不同环境配置应用程序时提供的灵活性. 此功能的另一个强大方面是,在任何给定时间,我们都可以拥有多个活动配置文件. 这样做的好处是我们可以将部署环境 ...
- Spring Boot中使用时序数据库InfluxDB
除了最常用的关系数据库和缓存之外,之前我们已经介绍了在Spring Boot中如何配置和使用MongoDB.LDAP这些存储的案例.接下来,我们继续介绍另一种特殊的数据库:时序数据库InfluxDB在 ...
- 自定义spring boot的自动配置
文章目录 添加Maven依赖 创建自定义 Auto-Configuration 添加Class Conditions 添加 bean Conditions Property Conditions Re ...
- Spring Bootstrap中具有配置元数据的高级配置
在简要介绍了配置元数据并涵盖了我之前的文章< 在Spring Boot中使用配置元数据Pimp您的配置>中的基础知识之后,现在该看看如何进一步执行此步骤并进一步自定义配置. 在这篇文章中, ...
- Spring Bootstrap中带有配置元数据的高级配置
在简要介绍了配置元数据并涵盖了我之前的文章< 在Spring Boot中使用配置元数据Pimp您的配置>中的基础知识之后,是时候看看如何进一步执行此步骤并进一步自定义配置了. 在本文中,我 ...
最新文章
- 深入解读Python的unittest并拓展HTMLTestRunner
- Vue+blockly 制作与自定义美化
- Unity5和WebGL移植指南的一些总结
- 基础研究到底要基础到什么程度?
- 同步异步 阻塞 非阻塞 异步调用 线程队列 协程
- 阿里云 云服务器ECS(CentOS 8.0 64位) 安装 MySQL 数据库
- C++ Web 编程 CGI公共网关接口(CGI):第一个 CGI 程序
- mysql空指针异常处理_mysql 查询空指针异常
- 10. Django基础:静态文件
- DNF单机从服务器获取信息,dnf单机云服务器
- 南京邮电大学MOOC高级程序语言设计(C++)第六章编程题答案
- 【自然语言处理】词性标注
- html 飘窗链接,飘窗html
- IntelliJ IDEA设置豆沙绿背景
- Windows11 出现桌面管理器dwm.exe占用内存过高的解决方法
- 用户运营 - 活跃度分析
- 美食app的UI设计
- idea提示“No suitable licenses associated with account balabala”
- 初识python之概念认知篇
- 【知识兔】六个Excel生成序号技巧,超级大技巧