34、springboot切换内嵌Web服务器(Tomcat服务器)与 生成SSL证书来把项目访路径从 HTTP 配置成 HTTPS
知识点1:springboot切换内嵌Web服务器(Tomcat服务器)
知识点2:生成SSL证书来把项目访路径从 HTTP 配置成 HTTPS
★ Spring Boot默认的Web服务器(Tomcat)
▲ 基于Servlet的应用(使用Spring MVC框架),spring-boot-starter-web.jar默认依赖spring-boot-starter-tomcat.jar,因此它默认使用Tomcat作为内嵌服务器。▲ 基于Reactive的应用(使用Spring WebFlux框架),spring-boot-starter-webflux.jar默认依赖spring-boot-starter-reactor-netty.jar,因此它默认使用Reactor Netty作为内嵌服务器。▲ 切换作为内嵌服务器。对pom.xml进行两步修改:(1)在spring-boot-starter-web.jar依赖配置内使用<exclusions.../>元素排除spring-boot-starter-tomcat.jar依赖。(2)显式添加spring-boot-starter-jetty.jar或spring-boot-starter-undertow.jar依赖。由此可见:要让Spring Boot应用切换使用Web服务器,基本不需要修改任何代码,只需要修改pom.xml文件即可。
演示:
spring-boot-starter-web 默认依赖 Tomcat 内置服务器
改为 Jetty 服务器
改为 Undertow 服务器
★ 配置HTTPS
目的:把请求路径 http://xxxxx 改成 https://xxxxx
如图:原本普通的项目,启动后是http的
早期: 早期的普通网站可能大部分都是基于HTTP的。http最大问题是:所有请求数据、响应数据都是明码,只要任何网络嗅探都可以轻松获取请求、和响应数据。现在: 绝大部分网站都已经改为给予HTTPSHTTPS所有请求数据、响应数据都是加密后的数据,只要任何网络嗅探都只能获取请求、和响应加密后的数据。唯一缺点是:性能略慢。目前传统的HTTP基本已经被淘汰了,现在大多用的都是HTTPS协议,它就是基于SSL,SSL代表Secure Socket Layer,安全网络层。
▲ 只需如下两步即可。
(1)生成或购买SSL证书。开发者自己生成的SSL证书通常只是用于测试,如果部署成实际运行的项目,浏览器会提示该SSL证书是不可信任的证书。(2)在application.properties(或application.yaml)文件中通过server.ssl.*属性配置即可。备注:如果希望应用能同时支持HTTPS连接器和HTTP连接器,推荐使用application.properties(或application.yaml)配置HTTPS,然后使用编程式的方式添加HTTP连接器。——一般不推荐这么干。
▲ 生成SSL证书(如果打算购买CA机构颁发的SSL证书,这一步可以省略)的命令:
keytool -genkey -v -alias spring -keyalg RSA -keystore F:\myCode\crazyCode\SpringBoot\SSLtest\spring.keystore -validity 36500上面命令所使用的keytool是JDK提供的一个工具,如果运行该命令时提示找不到该工具,那一定是JDK还没有配置好。keytool命令的-genkey是它的子命令,用于生成key。该子命令支持如下常用选项:-alias:指定证书别名。
-keyalg:指定算法。
-keystore:指定将证书存储在哪里。
-validity:指定证书的有效时间,指定为36500意味着有效期是100年。
配置 HTTPS 演示
第一步:先生成 SSL 证书
先按步骤生成自己的 SSL 证书,仅用于测试用。
输入这条命令:
keytool -genkey -v -alias spring -keyalg RSA -keystore F:\myCode\crazyCode\SpringBoot\SSLtest\spring.keystore -validity 36500
第二步:在yml配置文件中进行配置
在application.properties(或application.yaml)文件中通过server.ssl.*属性配置即可。
把证书拷贝到resources目录下。
因为项目要打包运行,肯定得把ssl证书放在项目中
然后在yml配置的时候,使用类加载路径下的 spring.keystore 作为 ssl 证书库
在yml配置ssl,启动项目,可以看到 http 变成 https 了
原本没配置ssl证书之前,是 http 这样的
配置成功后进行访问:https://localhost:8080/webFirst
因为ssl证书是自己生成的,所以肯定会报危险,因为自定义的ssl证书是可以随便写的。
接受风险并继续,可以看到能用 https 访问了
用 http 访问就变成这个样子了
配置了 https ,然后通过查看消息头,是属于 HTTP/1.1
小bug
bug详情
在yml配置的时候,出现这么个bug
java.io.FileNotFoundException: class path resource [spring.keystore] cannot be resolved to URL because it does not exist
表示找不到我放在项目的证书
需要再pom文件中添加这个配置才行
<resources><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>false</filtering></resource></resources>
★ 配置HTTP/2
现状:目前的主流浏览器都支持HTTP/2协议。HTTP/2是为了解决现有HTTP/1.1性能不好、安全性不足的问题才出现的。
Spring Boot不支持传统HTTP的HTTP/2,它只支持基于HTTPS的HTTP/2,因此在配置HTTP/2之前必须先配置SSL。▲ Undertow的HTTP/2支持:在yml配置文件中将server.http2.enabled属性 设置为true即可。▲ 从Tomcat 9.0.x开始,只要使用JDK 9+,将server.http2.enabled属性设为true即可。Spring Boot内置已经是Tomcat 9以上的版本。▲ Jetty的HTTP/2支持,需要添加额外的库,再将server.http2.enabled属性设为true即可。首先需要添加HTTP2 Server服务器:org.eclipse.jetty.http2: http2-server还需要根据环境来添加如下JAR包JDK 9+ : org.eclipse.jetty:jetty-alpn-java-serverJDK 8 : org.eclipse.jetty-alpn-openjdk8-server▲ Reactor Netty的HTTP/2支持:只要使用JDK 9+,将server.http2.enabled属性设为true即可。总结一下可发现:只要JDK使用JDK 9+,大部分Web服务器只要将server.http2.enabled属性设为true即可。除了Jetty要增加额外的库之外,Tomcat要使用Tomcat 9.0+
相关文章:

34、springboot切换内嵌Web服务器(Tomcat服务器)与 生成SSL证书来把项目访路径从 HTTP 配置成 HTTPS
知识点1:springboot切换内嵌Web服务器(Tomcat服务器) 知识点2:生成SSL证书来把项目访路径从 HTTP 配置成 HTTPS ★ Spring Boot默认的Web服务器(Tomcat) ▲ 基于Servlet的应用(使用Spring MV…...
3种CSS实现背景图片全屏铺满自适应的方式
01 margin:0px; background: url(images/bg.png) no-repeat; background-size:100% 100%; background-attachment:fixed; url(images/beijing.png)——图片路径的位置; no-repeat—— 图片不重复; center 0px——center是距离页面左边的定位…...

M1 Pro 利用docker 搭建pytho2的开发环境,以vscode连接开发为例
使用 M1 Pro (不支持python2的安装)开发,需要使用 Python 2.7 的环境,在使用 pyenv 安装 Python 2 时遇到了各种奇怪的问题。最终,我决定使用 Docker 搭建开发环境,并使用 VS Code 连接到本地容器。以下是详…...

MySQL概述,架构原理
一.MySQL简介 MySQL是一个关系型数据库管理系统,由瑞典的MySQL AB公司开发,后被oracle公司收购,MySQL是当下最流行的关系型数据库管理系统之一,在WEB应用方面,MySQL是最好的RDBMS(Relational Database Man…...

Three.js实现模型,模型材质可拖拽效果 DragControls
Three.js提供了一个拖拽的API DragControls 用于实现模型材质拖拽效果 DragControls:是一个用于在Three.js中实现拖拽控制的辅助类。它简化了在Three.js中实现拖拽物体的过程。 DragControls的构造函数接受三个参数: objects:一个包含需要…...
机器学习笔记之优化算法(二十)牛顿法与正则化
机器学习笔记之优化算法——再回首:牛顿法与正则化 引言回顾:经典牛顿法及其弊端牛顿法:算法步骤迭代过程中可能出现的问题正则化 Hessian Matrix \text{Hessian Matrix} Hessian Matrix与相应问题 引言 本节我们介绍经典牛顿法在训练神经网络过程中的迭…...

【Go 基础篇】深入探索:Go语言中的切片遍历与注意事项
嗨,Go语言学习者!在我们的编程旅程中,切片(Slice)是一个极其重要的工具。它可以帮助我们处理各种类型的数据,从而让我们的代码更加灵活和高效。本文将围绕Go语言中切片的遍历方法以及在遍历时需要注意的事项…...
一些经典的SQL语句
查sql中as的用法搜索到的一些经典的sql语句 convert(2008-11-20 18:03:50) In:等值连接,用来查找多表相同字段的记录 Not In:非等值连接,用来查找不存在的记录 Inner join:内连接,主要用来查找都符合条件的记录 Left join:左连接ÿ…...

〔018〕Stable Diffusion 之 批量替换人脸 篇
✨ 目录 🎈 下载插件🎈 插件基础使用🎈 基础使用效果🎈 批量处理图片🎈 多人脸部替换 🎈 下载插件 如果重绘图片的时候,你只想更换人物面部的话,可以参考这篇文章扩展地址ÿ…...
Unity字符串性能问题
前言 分享一些通过书籍和网络学到的知识 每次动态创建一个string,C#都会在堆内存分配一个内存用来分配字符串,因为C#没有对字符串的缓存机制,会导致每次连接、切割、组合的时候都会申请新的内存,并且抛弃原来的内存,等…...

深入浅出SSD:固态存储核心技术、原理与实战(文末赠书)
名字:阿玥的小东东 学习:Python、C/C 主页链接:阿玥的小东东的博客_CSDN博客-python&&c高级知识,过年必备,C/C知识讲解领域博主 目录 内容简介 作者简介 使用Python做一个计算器 本期赠书 近年来国家大力支持半导体行业࿰…...
关于layui+php,三级联动-编辑回显的问题。
注 忍不住吐槽一波。都什么年代了。现在都前后端分离,但是公司老项目非得用tplayui。。 代码如下 layui.use([form], function () {var form layui.form;//php代码渲染页面的时候,将一级分类id和二级分类id带过来,存到页面input框中&#x…...

lua的函数
1.一个示例实现列表的元素的求和 [root]# more funcAdd.lua function add(a)local sum 0for i 1,#a dosum sum a[i]endreturn sum enda {1,2,3,4,5,6}local sum add(a)print(sum)...
pytorch/tensorflow 直接给张量中的某个位置的值赋值,操作不可导。
问题:给一个tensor A中[i,j],赋值p。直接操作A[i,j]p可能会导致值覆盖,操作不可导。 解决方案:通过引入一个额外的mask实现。 mask[i,j] 0 mask tf.convert_to_tensor(mask, dtypetf.float32) A (A * mask) (p * (1-mask))p…...

如何使用CSS实现一个平滑滚动到页面顶部的效果(回到顶部按钮)?
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 平滑滚动到页面顶部的效果(回到顶部按钮)⭐ 创建HTML结构⭐ 编写CSS样式⭐ 编写JavaScript函数⭐ 添加滚动事件监听器⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右…...

【RuoYi移动端】uniApp导入和引用uView2.0插件
一、打开uiew官网 安装 | uView 2.0 - 全面兼容 nvue 的 uni-app 生态框架 - uni-app UI 框架uView UI,是 uni-app 生态最优秀的 UI 框架,全面的组件和便捷的工具会让您信手拈来,如鱼得水https://uviewui.com/components/install.html 也可直…...
etcd 备份还原
etcd 备份还原 查看 etcdctl 是否已经安装 # quick check if etcdctl is available or not ETCDCTL_API3 etcdctl --help | head安装 etcdctl # 获取 etcd 版本信息 kubectl exec -it etcd-master -n kube-system -- /bin/sh -c ETCDCTL_API3 /usr/local/bin/etcd --version…...

LInux之chrony服务器
目录 场景 重要性 LInux的两个时钟 硬件时钟 系统时钟 NTP协议 Chrony介绍 定义 组成 --- chronyd和chronyc 安装与配置 安装 Chrony配置文件分析 同步时间服务器 chronyc命令 chronyc sources输出分析 其它命令 查看时间服务器的状态 查看时间服务器是否在线 …...
《Flink学习笔记》——第七章 处理函数
为了让代码有更强大的表现力和易用性,Flink 本身提供了多层 API 在更底层,我们可以不定义任何具体的算子(比如 map,filter,或者 window),而只是提炼出一个统一的“处理”(process&a…...

Nacos基础(3)——nacos+nginx 集群的配置和启动 端口开放 nginx反向代理nacos集群
目录 引出nacos集群nginx反向代理nacos集群停止单例nacos准备8848和8858修改cluster.conf配置【配置】修改启动配置文件【配置】开放8858的端口分别以集群方式启动【启动】前端访问查看生产者测试8858nacos nginx反向代理配置代理tcp代理http启动nginx反向代理容器生产者访问测…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...

23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...

uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...

ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...

html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...