当前位置: 首页 > news >正文

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&#xff1a;springboot切换内嵌Web服务器&#xff08;Tomcat服务器&#xff09; 知识点2&#xff1a;生成SSL证书来把项目访路径从 HTTP 配置成 HTTPS ★ Spring Boot默认的Web服务器&#xff08;Tomcat&#xff09; ▲ 基于Servlet的应用&#xff08;使用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)——图片路径的位置&#xff1b; no-repeat—— 图片不重复&#xff1b; center 0px——center是距离页面左边的定位&#xf…...

M1 Pro 利用docker 搭建pytho2的开发环境,以vscode连接开发为例

使用 M1 Pro &#xff08;不支持python2的安装&#xff09;开发&#xff0c;需要使用 Python 2.7 的环境&#xff0c;在使用 pyenv 安装 Python 2 时遇到了各种奇怪的问题。最终&#xff0c;我决定使用 Docker 搭建开发环境&#xff0c;并使用 VS Code 连接到本地容器。以下是详…...

MySQL概述,架构原理

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

Three.js实现模型,模型材质可拖拽效果 DragControls

Three.js提供了一个拖拽的API DragControls 用于实现模型材质拖拽效果 DragControls&#xff1a;是一个用于在Three.js中实现拖拽控制的辅助类。它简化了在Three.js中实现拖拽物体的过程。 DragControls的构造函数接受三个参数&#xff1a; objects&#xff1a;一个包含需要…...

机器学习笔记之优化算法(二十)牛顿法与正则化

机器学习笔记之优化算法——再回首:牛顿法与正则化 引言回顾&#xff1a;经典牛顿法及其弊端牛顿法&#xff1a;算法步骤迭代过程中可能出现的问题正则化 Hessian Matrix \text{Hessian Matrix} Hessian Matrix与相应问题 引言 本节我们介绍经典牛顿法在训练神经网络过程中的迭…...

【Go 基础篇】深入探索:Go语言中的切片遍历与注意事项

嗨&#xff0c;Go语言学习者&#xff01;在我们的编程旅程中&#xff0c;切片&#xff08;Slice&#xff09;是一个极其重要的工具。它可以帮助我们处理各种类型的数据&#xff0c;从而让我们的代码更加灵活和高效。本文将围绕Go语言中切片的遍历方法以及在遍历时需要注意的事项…...

一些经典的SQL语句

查sql中as的用法搜索到的一些经典的sql语句 convert(2008-11-20 18:03:50) In:等值连接&#xff0c;用来查找多表相同字段的记录 Not In:非等值连接&#xff0c;用来查找不存在的记录 Inner join:内连接&#xff0c;主要用来查找都符合条件的记录 Left join:左连接&#xff…...

〔018〕Stable Diffusion 之 批量替换人脸 篇

✨ 目录 &#x1f388; 下载插件&#x1f388; 插件基础使用&#x1f388; 基础使用效果&#x1f388; 批量处理图片&#x1f388; 多人脸部替换 &#x1f388; 下载插件 如果重绘图片的时候&#xff0c;你只想更换人物面部的话&#xff0c;可以参考这篇文章扩展地址&#xff…...

Unity字符串性能问题

前言 分享一些通过书籍和网络学到的知识 每次动态创建一个string&#xff0c;C#都会在堆内存分配一个内存用来分配字符串&#xff0c;因为C#没有对字符串的缓存机制&#xff0c;会导致每次连接、切割、组合的时候都会申请新的内存&#xff0c;并且抛弃原来的内存&#xff0c;等…...

深入浅出SSD:固态存储核心技术、原理与实战(文末赠书)

名字&#xff1a;阿玥的小东东 学习&#xff1a;Python、C/C 主页链接&#xff1a;阿玥的小东东的博客_CSDN博客-python&&c高级知识,过年必备,C/C知识讲解领域博主 目录 内容简介 作者简介 使用Python做一个计算器 本期赠书 近年来国家大力支持半导体行业&#xff0…...

关于layui+php,三级联动-编辑回显的问题。

注 忍不住吐槽一波。都什么年代了。现在都前后端分离&#xff0c;但是公司老项目非得用tplayui。。 代码如下 layui.use([form], function () {var form layui.form;//php代码渲染页面的时候&#xff0c;将一级分类id和二级分类id带过来&#xff0c;存到页面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 直接给张量中的某个位置的值赋值,操作不可导。

问题&#xff1a;给一个tensor A中[i,j]&#xff0c;赋值p。直接操作A[i,j]p可能会导致值覆盖&#xff0c;操作不可导。 解决方案&#xff1a;通过引入一个额外的mask实现。 mask[i,j] 0 mask tf.convert_to_tensor(mask, dtypetf.float32) A (A * mask) (p * (1-mask))p…...

如何使用CSS实现一个平滑滚动到页面顶部的效果(回到顶部按钮)?

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

【RuoYi移动端】uniApp导入和引用uView2.0插件

一、打开uiew官网 安装 | uView 2.0 - 全面兼容 nvue 的 uni-app 生态框架 - uni-app UI 框架uView UI&#xff0c;是 uni-app 生态最优秀的 UI 框架&#xff0c;全面的组件和便捷的工具会让您信手拈来&#xff0c;如鱼得水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学习笔记》——第七章 处理函数

为了让代码有更强大的表现力和易用性&#xff0c;Flink 本身提供了多层 API 在更底层&#xff0c;我们可以不定义任何具体的算子&#xff08;比如 map&#xff0c;filter&#xff0c;或者 window&#xff09;&#xff0c;而只是提炼出一个统一的“处理”&#xff08;process&a…...

Nacos基础(3)——nacos+nginx 集群的配置和启动 端口开放 nginx反向代理nacos集群

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

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

多场景 OkHttpClient 管理器 - Android 网络通信解决方案

下面是一个完整的 Android 实现&#xff0c;展示如何创建和管理多个 OkHttpClient 实例&#xff0c;分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态

前言 在人工智能技术飞速发展的今天&#xff0c;深度学习与大模型技术已成为推动行业变革的核心驱动力&#xff0c;而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心&#xff0c;系统性地呈现了两部深度技术著作的精华&#xff1a;…...

基于鸿蒙(HarmonyOS5)的打车小程序

1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...

恶补电源:1.电桥

一、元器件的选择 搜索并选择电桥&#xff0c;再multisim中选择FWB&#xff0c;就有各种型号的电桥: 电桥是用来干嘛的呢&#xff1f; 它是一个由四个二极管搭成的“桥梁”形状的电路&#xff0c;用来把交流电&#xff08;AC&#xff09;变成直流电&#xff08;DC&#xff09;。…...