基于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

基于SpringBoot项目的https相关推荐

  1. 终于有人把 SpringBoot 项目的Http客户端工具说清楚了!

    大家都知道okhttp是一款由square公司开源的java版本http客户端工具.实际上,square公司还开源了基于okhttp进一步封装的retrofit工具,用来支持通过接口的方式发起http ...

  2. webrtc笔记(1): 基于coturn项目的stun/turn服务器搭建

    webrtc是google推出的基于浏览器的实时语音-视频通讯架构.其典型的应用场景为:浏览器之间端到端(p2p)实时视频对话,但由于网络环境的复杂性(比如:路由器/交换机/防火墙等),浏览器与浏览器 ...

  3. 创建 SpringBoot 项目的 3 种方式

    前言 如果你是一个浸淫 SpringBoot 已久的老手,那么可能下面的内容可能不那么适合你,写得很简单.但如果是 对于一个刚学习 SpringBoot 的新手而言,我想多少还是有些用的.本文就来手把 ...

  4. 【机器学习】基于实战项目的SVM算法库使用方法详解

    0. 学习背景 本人在进行车道线检测项目中使用到了LBP+SVM算法来改善高复杂度场景下的车道线特征提取效果,主要流程如下:提取训练集中车道线的LBP特征,然后训练一个SVM分类器.在测试时,使用相同 ...

  5. SpringBoot项目的Liunx服务器部署(一)

    背景 springboot配置相当简单,这是人人皆知的.而且springboot还自带内嵌了tomcat,并且是以jar包形式打包的,这和之前的war包在部署上还有些区别,今天我主要讲一下如何将spr ...

  6. 【Kotlin协程】基于RxJava项目的Coroutine改造

    最近,Android宣布彻底废弃AsyncTask,推荐Coroutine作为首选的异步编程方案. 如果说AsyncTask被Coroutine替代毫无悬念,那RxJava与Coroutine如何取舍 ...

  7. 自定义SpringBoot项目的Maven原型

    前言: 每次创建一个简单的项目,然后在像里面添加一些东西, 难免有些麻烦, 项目的骨架每次都是大同小异, 那么maven刚好可以提供模板可以每次对这个模板进行简单的修改, 就能实现公共项目的构建了.网 ...

  8. SpringBoot项目的application.properties放在Jar包外加载

    第一.项目jar包同级下的config文件夹是优先级最高的,是在执行命令的目录下建config文件夹.application.properties放在config文件夹里面肯定最先读取. 第二.项目j ...

  9. SpringBoot项目的 pom.xml第一行报错

    当我们第一次创建SpringBoot项目的时候有时会发现SpringBoot项目里的pom.xml第一行报错. 对于这个报错问题,是由于jar包版本太高了. 错误显示 我们要修改jar包的版本 解决方 ...

最新文章

  1. 计算机在线平方,完全平方数批量判断在线计算器_三贝计算网_23bei.com
  2. mysql索引图文操作_图文并茂,说说MySQL索引
  3. k8s kube-dns和服务发现
  4. 信息核心技术体系是通往信息世纪的中国门票
  5. 神奇的仙丹,性感的Elixir
  6. c语言 malloc_C语言数据结构 | 第一讲
  7. EventThread线程对VSync的接收
  8. 大数据时代,数据恢复技巧你会了吗?
  9. 【SpringBoot_ANNOTATIONS】组件注册 06 @Conditional 按照条件注册bean
  10. Repast HPC Tutorial学习操作中出现的问题及解决办法(更新ing)
  11. Excel内容自动翻译
  12. 大文件上传插件webupload插件
  13. 扫描枪取消回车二维码_扫码枪设置自动回车方法步骤,条码扫描枪不自动回车怎么办...
  14. 研发管理02----嵌入式硬件设计流程之完善
  15. Verilog自学:关于门级,数据流级,行为级建模
  16. Win10系统版本号太低,而无法安装像AI和PS这样的软件怎么办?
  17. PHP站内搜索功能(laravel自带Scout驱动+elasticsearch)
  18. 美术课程对计算机的好处,学美术的十大好处
  19. HarmonyOS的万里长征和万里长城
  20. 【python】Python语言程序设计/嵩天老师入门课程笔记整理

热门文章

  1. 自己做计算机三级,计算机三级辅导:自己“做”软驱
  2. c#字符型转化为asc_wap站 utf-8与 gb2312字符编码的转化函数
  3. 每日一题(26)—— 无限循环的几种形式
  4. python中continue格式_python自学(3)--for 、 while、 break、continue、字符格式化输出...
  5. LeetCode MySQL 1212. 查询球队积分
  6. LeetCode 第 199 场周赛(757/5231,前14.5%)
  7. LeetCode 157. 用 Read4 读取 N 个字符
  8. LeetCode 286. 墙与门(BFS)
  9. 谷歌插件开发ajax请求,chrome插件 注入js以及发送ajax(message/request)
  10. python列表appendtext_python-默认文本以及列表textvariable Entry小部...