Spring Boot项目同时使用http和https

有些时候项目需要同时监听在不同的端口上,比如同时监听http80和https 443端口,这时我们需要自定义web server。

假设我们需要项目同时使用http和https两种协议提供服务,分别使用端口80和443。

我们知道Spring Boot内置了tomcat,jetty,undertow和响应式的netty4中web server,默认使用tomcat,所以这里使用tomcat要演示如何让项目同时支持使用http和https协议。

WebServerFactoryCustomizer接口

很明显,WebServerFactoryCustomizer接口是Spring Boot专门用于让开发者自定义web server的!

package org.springframework.boot.web.server;@FunctionalInterface
public interface WebServerFactoryCustomizer<T extends WebServerFactory> {void customize(T factory);
}

很简单,只有一个支持泛型的方法,其参数是WebServerFactory接口的子类。
WebServerFactory接口的几个重要实现:

  • TomcatServletWebServerFactory:对应于tomcat
  • JettyServletWebServerFactory:对应jetty
  • UndertowServletWebServerFactory:对应undertow
  • NettyReactiveWebServerFactory:对应netty

Spring Boot默认使用http/1.1协议。所以我们增加额外的自定义https连接器。

生成SSL证书文件

严格来说https不是一个独立协议,只是在http协议基础上增加了SSL/TLS加密层。所以我们需要先生成SSL证书,这里使用keytool生成jks。

 keytool -genkey -alias test -keypass 555555 -keyalg RSA -sigalg sha256withrsa -keysize 1024 -validity 365 -keystore ./localhost.jks

在这里插入图片描述

这里key的密码设置为555555,对应Spring Boot配置项server.ssl.key-password,使用RSA算法.
在执行命令时需要输入密钥库口令,对应SpringBoot配置项server.ssl.key-store-password.

启用https

Spring Boot默认使用http:8080。所以需要覆盖默认配置:
首先需要将上一步生成的localhost.jks放到项目的resources下:

server.port=443
server.ssl.enabled=true
server.ssl.key-store=classpath:localhost.jks
server.ssl.key-password=555555
server.ssl.key-store-password=123456

重启项目,在浏览器中访问https://localhost即可使用https。

增加http额外的连接器

import org.apache.catalina.connector.Connector;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.stereotype.Component;/*** 自定义tomcat http 80连接器** @author cloudgyb* @since 2022/3/12 15:28*/
@Component
public class TomcatServerCustomer implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {@Overridepublic void customize(TomcatServletWebServerFactory factory) {final Connector httpConn = new Connector("HTTP/1.1");httpConn.setPort(80);factory.addAdditionalTomcatConnectors(httpConn);}
}

重启项目,此时已经同时支持https:443和http:80了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/253624.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

http和https的区别https的连接方式

首先了解什么是http协议&#xff0c;http协议是超文本传输协议&#xff0c;他存在的目的是为浏览器和服务器之前传输信息。但是http是明文传输的&#xff0c;不管是谁&#xff0c;只要抓取了浏览器传向服务器&#xff0c;或者服务器传向浏览器的信息&#xff0c;就可以获取里面…

http和https有什么区别?

ps&#xff1a;https就是http和TCP之间有一层SSL层&#xff0c;这一层的实际作用是防止钓鱼和加密。防止钓鱼通过网站的证书&#xff0c;网站必须有CA证书&#xff0c;证书类似于一个解密的签名。另外是加密&#xff0c;加密需要一个密钥交换算法&#xff0c;双方通过交换后的密…

HTTP和HTTPS的区别详解

1.HTTP的缺点 &#xff08;点击题目解锁惊喜↑↑&#xff09; 通信使用明文&#xff08;不加密&#xff09;&#xff0c;内容可能会被窃听。不验证通信方的身份&#xff0c;因此有可能遭遇伪装。无法证明报文的完整性&#xff0c;所以有可能已遭篡改。某些特定的web服务器和特…

HTTP和HTTPS请求的整个过程详解

HTTP和HTTPS请求的整个过程详解 小橙子 小橘子的日记 4月17日 HTTP和HTTPS的请求流程也是面试的时候一大考点&#xff0c;如果不掌握的话&#xff0c;容易丢失印象分。这两种请求都是基于TCP/IP&#xff0c;不明白的请看上一篇文章。这里总结HTTP/HTTPS请求的整个过程&#xf…

http和https协议有什么区别

1、https协议需要到CA &#xff08;Certificate Authority&#xff0c;证书颁发机构&#xff09;申请证书&#xff0c;一般免费证书较少&#xff0c;因而需要一定费用。(原来网易官网是http&#xff0c;而网易邮箱是https。) 2、http是超文本传输协议&#xff0c;信息是明文传…

浅谈 HTTP 和 HTTPS

很多前端伙伴问题有没有体系的面试题&#xff1f; 今天为大家推荐一款刷题神奇哦 点击链接访问牛客网 各大互联网大厂面试真题。从基础到入阶乃至原理刨析类面试题 应有尽有&#xff0c;赶快来装备自己吧&#xff01;助你面试稳操胜券&#xff0c;solo全场面试官 浅谈 HTTP 和 …

http与https概述

http与https的区别 1 背景2 基本概念3 区别4 工作原理4.1 HTTP工作原理4.2 HTTPS工作原理 5 HTTPS优缺点5.1 优点5.2 缺点 6 HTTP请求消息和响应消息6.1 请求消息6.2 响应消息 1 背景 超文本传输协议&#xff08;HTTP协议&#xff09;被用于在Web浏览器和网站服务器之间传递信…

HTTP和HTTPS协议,看一篇就够了

一、前言&#xff1a; 先来观察这两张图&#xff0c;第一张访问域名http://www.12306.cn&#xff0c;谷歌浏览器提示不安全链接&#xff0c;第二张是https://kyfw.12306.cn/otn/regist/init&#xff0c;浏览器显示安全&#xff0c;为什么会这样子呢&#xff1f;2017年1月发布的…

HTTP和HTTPS

1. 前言 近几年&#xff0c;互联网发生着翻天覆地的变化&#xff0c;尤其是我们一直习以为常的HTTP协议&#xff0c;在逐渐的被HTTPS协议所取代&#xff0c;在浏览器、搜索引擎、CA机构、大型互联网企业的共同促进下&#xff0c;互联网迎来了“HTTPS加密时代”&#xff0c;HTT…

HTTP 和 HTTPS 的区别

一、简述 1️⃣HTTP (全称 Hyper Text Transfer Protocol)&#xff0c;就是超文本传输协议&#xff0c;用来在 Internet 上传送超文本。是互联网上应用最为广泛的一种网络协议&#xff0c;是一个客户端和服务器端请求和应答的标准(TCP)&#xff0c;用于从 WWW 服务器传输超文本…

什么是HTTP协议和HTTPS协议,以及两者的区别

HTTP协议 超文本传输协议&#xff08;Hyper Text Transfer Protocol&#xff09;&#xff0c;是一个简单的请求-响应协议&#xff0c;它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以形式给出&#xff1b;而消息内…

HTTP与HTTPS的区别

超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息&#xff0c;HTTP协议以明文方式发送内容&#xff0c;不提供任何方式的数据加密&#xff0c;如果攻击者截取了Web浏览器和网站服务器之间的传输报文&#xff0c;就可以直接读懂其中的信息&#xff0c;因此&…

HTTP与HTTPS是什么?http和https的区别

一、HTTP是什么&#xff1f; HTTP 是超⽂本传输协议&#xff0c;也就是Hyper Text Transfer Protocol。 HTTP 是⼀个在计算机世界⾥专⻔在「两点」之间「传输」⽂字、图⽚、⾳频、视频等「超⽂本」数据的「约定和规范」。 超⽂本传输协议&#xff0c;它可以拆成三个部分&…

HTTP与HTTPS的区别,详细介绍

需要查看更多的计算机网络相关的知识&#xff1f;点击这里 目录 HTTP与HTTPS介绍 HTTPS和HTTP的主要区别 HTTPS的主干层次介绍 客户端在使用HTTPS方式与Web服务器通信时的步骤 CA证书的申请及其使用过程 SSL与TLS SSL/TLS历史 SSL/TLS协议的基本过程 SSL/TLS 密码套件…

C++ vector与map的结合运用

目录 vector和map的简单介绍&#xff1a; 今天我们用vector容器和map容器实现以下简单的功能&#xff1a; 案例描述&#xff1a; 图解: ​ 实现步骤&#xff1a; 代码实现&#xff1a; 运行结果&#xff1a; vector和map的简单介绍&#xff1a; map和vector都是C STL&…

系统漏洞利用与提权

任务二&#xff1a;系统漏洞利用与提权 任务环境说明&#xff1a; 服务器场景&#xff1a;PYsystem0033 服务器场景操作系统&#xff1a;Ubuntu 服务器场景用户名:未知 密码&#xff1a;未知 1.使用nmap扫描靶机系统&#xff0c;将靶机开放的端口号按从小到大的顺序作为F…

pycharm内置Git操作失败的原因

文章目录 问题简介解决方案DNS缓存机制知识的自我理解 问题简介 最近在pycharm中进行代码改动递交的时候&#xff0c;总是出现了连接超时或者推送被rejected的情况&#xff0c;本以为是开了代理导致的&#xff0c;但是关闭后还是推送失败&#xff0c;于是上网查了以后&#xf…

集群模式下,redis锁的问题,红锁

在使用redis来实现分布式锁的时候&#xff0c;如果redis是集群的&#xff0c;比如1主4从&#xff0c;这种主从模式就会存在延迟问题&#xff0c;导致加锁出现问题。 此时就应该使用红锁的方案&#xff0c;即在代码中不依赖于主从&#xff0c;将这5台机器视为平等的&#xff0c…

redis锁

用django-redis很容易实现redis分布式锁&#xff0c;但本文介绍用另外一种方式redis模块来实现redis锁—过期后自动解锁。 from celery_demo.celery import app import time from celery import Celery, platforms # from django.core.cache import cache import redisplatfor…

深入理解Redis分布式锁

背景 项目中有个场景是做数据分析&#xff0c;然后将目标数据保存在db,有个要求是将同类型的目标数据值保存一次&#xff0c;因此每次保存时需要判断之前是否已经存在了&#xff0c;由于qps较高&#xff0c;之前使用redis来缓存已经保存的数据&#xff0c;来抵挡对db的大部分流…