基于SpringBoot项目的https

基于SpringBoot项目的https

在spring中配置项目运行的端口很简单。

在application.properties中

server.port: 8080

这样配置后,spring boot内嵌的tomcat服务器就是跑在8080端口启动http服务。但是如果在配置中启动https服务,用到的端口也是server.port。spring 不支持同时在配置中启动http和https。
但是如果这样配置,项目只能走http协议。如果想让项目支持https协议,可以有两种方法。
一:在配置中配置https的配置信息,http采用硬编码的方式
二:用硬编码的方式来写https
用硬编码的方式写https有点麻烦,所以一般都采用第一种方式。
无论用哪种方式,想支持https,一定要生成一对秘钥。用openssl生成证书:

复制代码
openssl genrsa -out server.key 2048   //生成服务器端私钥openssl req -new -key server.key -out server.csr   //生成服务端证书请求文件 注意生成过程中需要你输入一些服务端信息
openssl x509 -req -sha256 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650 -out server.crt //使用CA证书生成服务端证书  关于sha256,默认使用的是sha1,在新版本的chrome中会被认为是不安全的,因为使用了过时的加密算法。
openssl pkcs12 -export -in server.crt -inkey server.key -out server.pkcs12  //打包服务端的资料为pkcs12格式(非必要,只是换一种格式存储上一步生成的证书)
生成过程中,需要创建访问密码,请记录下来。
keytool -importkeystore -srckeystore server.pkcs12 -destkeystore server.jks -srcstoretype pkcs12 //生成服务端的keystore(.jks文件, 非必要,Java程序通常使用该格式的证书)
生成过程中,需要创建访问密码,请记录下来。 把ca证书放到keystore中(非必要) 
keytool -importcert -keystore server.jks -file ca.crt
复制代码

生成证书后,让浏览器信任跟证书(ca.crt)。
打开浏览器的设置。找到设置信任证书的部分。导入证书。
准备工作完毕,看一下代码
application.properties

server.port: 8092
server.ssl.key-store=/home/fzk/key/server.jks
server.ssl.key-store-password=123456        //这个是在生成证书的时候设置的密码

fzk.port:8091
fzk.port:8091是自定义的名。因为不可能同时出现两个server.port

同时支持http还需要一个java类
HttpsConfiguration.java (名字自己随便起)

复制代码
import org.apache.catalina.connector.Connector;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class HttpsConfiguration {@Value("${fzk.port}")private int port;@Beanpublic EmbeddedServletContainerFactory servletContainer() {TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();tomcat.addAdditionalTomcatConnectors(createHttpConnector());return tomcat;}private Connector createHttpConnector() {Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");connector.setScheme("http");connector.setPort(port);connector.setSecure(false);return connector;}
}
复制代码

@Configuration是spring的注解,表示这是一个配置。@Value("${fzk.port}")找到配置文件中的fzk.port赋值给int类型的port。还可以写成下面这样:

复制代码
@Configuration(prefix = "fzk")
public class HttpsConfiguration {private int port;public void setPort(int port){this.port = port;}public int getPort(){return port;}
}
复制代码

此时类中的属性名和配置文件中的名一定要对应上。

这样就可以让项目同时支持http和https了。

上面说了还有另外一种方法,采用硬编码https的请求的方式。

配置文件中可以不用写服务端口号,直接看java类

复制代码
@Configuration
public class HttpsConfiguration {@Beanpublic EmbeddedServletContainerCustomizer containerCustomizer() {return new EmbeddedServletContainerCustomizer() {@Overridepublic void customize(ConfigurableEmbeddedServletContainer container) {Ssl ssl = new Ssl();// Server.jks中包含服务器私钥和证书ssl.setKeyStore("/home/fzk/key/server.jks");ssl.setKeyStorePassword("123456");container.setSsl(ssl);container.setPort(8092);}};}@Beanpublic EmbeddedServletContainerFactory servletContainerFactory() {TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory() {@Overrideprotected void postProcessContext(Context context) {SecurityConstraint securityConstraint = new SecurityConstraint();securityConstraint.setUserConstraint("CONFIDENTIAL");SecurityCollection collection = new SecurityCollection();collection.addPattern("/*");securityConstraint.addCollection(collection);context.addConstraint(securityConstraint);}};factory.addAdditionalTomcatConnectors(createHttpConnector());return factory;}private Connector createHttpConnector() {Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");connector.setScheme("http");connector.setSecure(false);connector.setPort(8093);connector.setRedirectPort(8092);return connector;}
}
复制代码

第一个bean的部分是使端口8092的https可以访问。下面的部分是让端口8093的http重定向到8092。

转载于:https://www.cnblogs.com/hejunnuo/p/10323688.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数年沉寂之后,VR/AR产业开始起飞!

来源:先进制造业现在,“新基建”已成为拉动投资、促进消费、稳定就业和提升综合实力的重要抓手,如何加载高质量的业务生态成为释放新基建发展动能的关键。当前,以虚拟现实VR(包含增强现实AR)为代表的未来视…

计算机网络(四)-奈氏准则和香农公式

一.奈氏准则 1.失真 1.1 在现实中信道,受到带宽限制,噪声,干扰等的影响,使信号失真。 1.2 影响失真程度的因素: 码元传输速率信号传输距离噪声干扰传输媒体质量 1.3 失真的一种现象------码间串扰 1)对于低频信号&…

珍藏版:3万字详解mRNA疫苗

来源:周观宇论撰文:邓周宇摘要新冠疫情的持续凸显了疫苗的重要性以及全球对疫苗的迫切需求。借此契机,mRNA疫苗登上了舞台,并以极高的保护率成为所有新冠疫苗种类中热度最高的C位选择。本报告介绍分析了mRNA疫苗相较于其他技术路径…

计算机网络(五)-物理层

一.物理层 1.基本概念 1.1 物理层解决如何在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体。 1.2 物理层主要任务:确定与传输媒体接口有关的一些特性,即定义标准。 机械特性:定义物理连接的特性&#xff0c…

从脑瘫患者重获交流到免开颅微创,脑机接口更安全了吗?

来源:燕良脑机接口技术作为一项前沿而又酷炫的技术,一直备受瞩目,近日,脑机接口技术取得了高价值进展,从大脑活动中解码完整句子,使得瘫痪失语者可以交流,让很多人看到了曙光。该项目是Facebook…

计算机网络(六)-传输介质

一.传输介质 1.1 传输介质也称传输媒体/传输媒介,它就是数据传输系统中在发送设备和接收设备之间的物理通路。 1.2 传输媒体并不是物理层。传输媒体在物理层的下面,因为物理层是体系结构的第一层,因此有时称传输媒体为第0层。 1.3 传输媒体…

SpringBoot项目中,Redis的初次使用

1.引入Redis依赖包&#xff0c;在application.yml中配置redis <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency> Spring:redis:host: 192.168.1.105port: …

AI不会很快取代作家——但未来可能比你想象的更近

来源&#xff1a;Forbes编译&#xff1a;科技行者能够创作内容的人工智能是一种过度炒作吗&#xff1f;还是所有的作家最终都将被机器人取代&#xff1f;企业并不一定需要更多的内容&#xff0c;但他们需要的是更好的内容。 在很多企业的简化内容营销和管理工作中&#xff0c;人…

计算机网络(七)-物理层设备

一.中继器 1.1 功能&#xff1a;对数字信号进行再生和还原&#xff0c;保持与原数据相同&#xff0c;以增加信号传输距离&#xff0c;延长网络的长度。 1.2 中继器的两端 两端的网络部分是网段&#xff0c;不是子网&#xff0c;适合完全相同的两类网络的互连&#xff0c;且两…

jquery的全选和多选操作

//全选产品 $(#checkAll).click(function() { $(this).prop(checked,!$(this).prop(checked)); if($(this).prop(checked)) { $(this).prop(checked,false); $(#getProduct input).each(function(index,item) { $(item).prop(checked,false) }) }else { $(this).prop(checked,t…

计算机网络(八)-数据链路层-帧封装

一.数据链路层 1.1 基本概念 结点:主机、路由器链路&#xff1a;网络中两个结点之间的物理通道&#xff0c;链路的传输介质主要有双绞线、光纤和微波。分为有线链路和无线链路。数据链路&#xff1a;网络中两个结点之间的逻辑通道&#xff0c;把实现控制数据传输协议的硬件和…

世界首富太空争霸:从地上斗到天上,马斯克VS贝索斯,谁能赢

来源&#xff1a;腾讯新闻棱镜作者&#xff1a;王凡编辑&#xff1a;杨布丁以2043亿美元个人资产位列全球首富的杰夫贝索斯(Jeff Bezos)也有“既生瑜、何生亮”的时刻。过去几十年,贝索斯和马斯克分别以“新物种”颠覆了传统零售和传统车企,以碾压之势席卷了整个行业。亚马逊和…

计算机网络物理层-编码技术实现

一.编码技术 编码技术描述归零编码(RZ)信号电平在一个码元内要恢复到0状态非归零编码(NRZ)高1低0反向不归零编码(NRZI)前后信号翻转表示后面一个码元为0&#xff0c;电平不变代表1曼彻斯特编码一个码元内&#xff0c;前高后低位1&#xff0c;前低后高为0差分曼彻斯特编码码元为…

神经网络的可解释性综述

报道&#xff1a;人工智能前沿讲习 作者&#xff1a;知乎—机器学习小谈地址&#xff1a;https://zhuanlan.zhihu.com/p/368755357本文以 A Survey on Neural Network Interpretability 读后感为主&#xff0c;加上自身的补充&#xff0c;浅谈神经网络的可解释性。论文&#x…

大数据技术原理与应用-概述

一.大数据概述 (一)大数据概念 1.技术支撑&#xff1a;存储、计算、网络。 2.数据产生方式 第一阶段&#xff1a;运营式系统阶段第二阶段&#xff1a;用户原创内容阶段第三阶段&#xff1a;感知式系统阶段(物联网的实现普及) 3.大数据的特性(4V) 快速化(variety) 处理速度…

突破性进展!上海光机所成果登上《Nature》封面!

来源&#xff1a;中国科学院上海光学精密机械研究所中国科学院上海光学精密机械研究所强场激光物理国家重点实验室&#xff0c;利用自行研制的具有国际领先综合性能的超强超短激光装置&#xff0c;在基于激光加速器的小型化自由电子激光研究方面取得突破性进展。研究团队通过显…

爬取今日头条财经版块新闻

使用jupyter编辑, etree爬取 进入头条财经新闻网页,无法获取原网页内容,在查看各个请求中发现一个url里包含新闻信息.信息都在data里 import requests from lxml import etree import json url "https://www.toutiao.com/api/pc/feed/?categorystock&utm_sourcetout…

计算机网络(九)-物理层(补充)-傅里叶变换-信道复用

一.几个术语 1.码元------在使用时间域(时域)的波形表示数字信号时&#xff0c;代表不同离散数值的基本波形。 2.调制------把数字信号转换为模拟信号的过程。 3.解调------把模拟信号转换为数字信号的过程。 4.双绞线水晶头:从左到右分别为橙白橙(发送)、绿白蓝、蓝白绿、…

硅光芯片:突破“摩尔定律”曙光初现

来源&#xff1a;中国军网讲叙人&#xff1a;江天&#xff0c;国防科技大学前沿交叉学科学院研究员作者&#xff1a;王握文、任永存、朱晰然它是在硅基平台上将光电子和微电子融合起来的一种新技术它显示出的优异性能&#xff0c;为芯片研发“换道超车”带来希望它发展方兴未艾…

计算机网络(十)-数据链路层-差错控制

一.差错控制 1.1 差错: 噪声引起 全局性&#xff1a;由于线路本身电气特性所产生的随机噪声(热噪声),是信道固有的&#xff0c;随机存在。解决办法&#xff1a;提高信噪比来减小或避免干扰。局部性&#xff1a;外界特定的短暂原因所造成的的冲击噪声&#xff0c;是产生的差错…