SpringBoot后端服务开启Https协议提供访问(使用阿里云资源)

目录

概述

 申请/下载证书

部署证书

本地测试访问

服务器部署访问

 最后/扩展

总结


概述

本篇博客说明如何将SpringBoot项目开启Https协议提供访问。

博文以步骤【申请/下载证书】,【部署证书】,【本地测试访问】,【服务器部署访问】 ,【扩展】展开说明。

废话:当我们有类似需求:“小程序上线”后,请求的后端服务必须使用https协议,那么我们就需要去将http协议升级为https协议了。

https协议?大致可以看成: 

https协议 = http协议 + ssl协议

所以,要想将http升级成https很简单,只需要有一个ssl证书,然后部署到项目即可。

前提准备:IPC备案过的域名

那么,如下就开始我们的说明。 

 申请/下载证书

我使用的是阿里云的服务器和域名,因此可以到阿里云官网搜索【ssl证书】进入【数字证书管理服务】控制台。

 我们点击【免费证书】--->【创建证书】--->【证书申请】

 输入自己备案好的域名,其他基本默认,点击【提交审核】

审核基本上几分钟就可以下发证书,会有短信提示。

审核好后,我们就可以点击【下载】,获取我们的证书。 

 我使用的是SpringBoot项目做的测试,使用内置服务器Tomcat,因此直接下载Tomcat对应证书。

 下载的压缩包内容:

 第一个是我们的证书,第二个是密码文本文件(存储密码)。

部署证书

我创建了一个空的SpringBoot项目来做演示,写了一个简单的接口来测试:

 项目结构   

 IndexController(测试接口)

 

 1.将证书放到resources目录下

 2.编写配置文件application.yml

***key-store声明证书的放置的路径

 ***请注意key-store-password填写自己下载的压缩包.txt文件里面的密码

 到此,我们启动项目即可。

本地测试访问

我们使用Postman进行测试。

ps:当我们使用本地进行测试的时候,由于本地的IP与我们申请证书时添加的IP不一致,那么Postman会报错IP不匹配,我们可以不用理会,点击【Disable SSL Verification】关掉SSL验证即可。

 成功。

服务器部署访问

我们将SpringBoot项目打包,上传到服务器, java -jar运行,然后Postman测试: 

 当然,我们也可以使用域名(申请证书时填写的域名)进行访问。

 最后/扩展

我们可能会有这样的需求:

我们也许不是一开始做项目就部署了SSL证书,而是后期再部署SSL证书,那么我们在此之前前端项目使用的是http协议进行后端服务访问,那么我们能不能不修改前端的代码,想要http协议和https协议都能访问呢?

这是可以的,我们可以将http协议的访问重定向到https协议进行访问即可。

这样做后,我们后端服务跑起来的时候就会开启两个端口,一个http的端口,一个https的端口。

在启动类中进行配置

package com.mh;import org.apache.catalina.Context;
import org.apache.catalina.connector.Connector;
import org.apache.tomcat.util.descriptor.web.SecurityCollection;
import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;@SpringBootApplication
public class SslTestApplication {public static void main(String[] args) {SpringApplication.run(SslTestApplication.class, args);}@Beanpublic TomcatServletWebServerFactory tomcatServletWebServerFactory() {TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory() {@Overrideprotected void postProcessContext(Context context) {SecurityConstraint securityConstraint = new SecurityConstraint();securityConstraint.setUserConstraint("CONFIDENTIAL");SecurityCollection securityCollection = new SecurityCollection();securityCollection.addPattern("/*");securityConstraint.addCollection(securityCollection);context.addConstraint(securityConstraint);}};factory.addAdditionalTomcatConnectors(httpConnector());return factory;}@Beanpublic Connector httpConnector() {Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");connector.setScheme("http");// http的端口connector.setPort(8080);connector.setSecure(false);// http的端口后转向到的https的端口connector.setRedirectPort(443);return connector;}
}

当然,你也可以做配置类,我这里直接放到启动类了,只要能将他们加到IOC容器即可生效。

 配置好后,我们再打包,重新放到服务器运行,浏览器测试:

回车后,自动跳转访问https

总结

开启Https很简单,总的来说只需要下载一个SSL证书进行部署即可。

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

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

相关文章

【Java】BF算法(串模式匹配算法)

☀️ 什么是BF算法 BF算法,即暴力算法,是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个与模式串T的第一个字符串进行匹配,若相等,则继续比较S的第二个字符和T的第二个字符;若不相等,则…

迭代器模式-遍历聚合对象中的元素

在开发中,我们经常使用到Iterator这个接口,我们很疑惑于这个接口的作用,认为集合已经实现了数据访问的方法,增加Iterator的意义在哪。本文我们将学习迭代器模式,用以探讨Iterator的作用。 1.1 迭代器模式概述 提供一…

LeetCode 160.相交链表

文章目录 💡题目分析💡解题思路🚩步骤一:找尾节点🚩步骤二:判断尾节点是否相等🚩步骤三:找交点🍄思路1🍄思路2 🔔接口源码 题目链接👉…

LAXCUS分布式操作系统:技术创新引领高性能计算与人工智能新时代

随着科技的飞速发展,高性能计算、并行计算、分布式计算、大数据、人工智能等技术在各个领域得到了广泛应用。在这个过程中,LAXCUS分布式操作系统以其卓越的技术创新和强大的性能表现,成为了业界的佼佼者。本文将围绕LAXCUS分布式操作系统的技…

Jmeter 参数化的几种方法

目录 配置元件-用户自定义变量 前置处理器-用户参数 配置元件-CSV Data Set Config Tools-函数助手 配置元件-用户自定义变量 可在测试计划、线程组、HTTP请求下创建用户定义的变量 全局变量,可以跨线程组调用 jmeter执行的时候,只获取一次&#xff0…

LeetCode-101. 对称二叉树

Problem: 101. 对称二叉树 文章目录 思路解题方法Code结果 思路 看到这个题,想到的解题方法是使用递归实现。判断二叉树是否对称,需要判断根节点的左子树和右子树是否对称。所以从根节点开始,递归判断左子树的左节点是否和右子树的右节点是否…

【实战】十一、看板页面及任务组页面开发(一) —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(二十三)

文章目录 一、项目起航:项目初始化与配置二、React 与 Hook 应用:实现项目列表三、TS 应用:JS神助攻 - 强类型四、JWT、用户认证与异步请求五、CSS 其实很简单 - 用 CSS-in-JS 添加样式六、用户体验优化 - 加载中和错误状态处理七、Hook&…

NPM与外部服务的集成(上)

目录 1、关于访问令牌 1.1 关于传统令牌 1.2 关于粒度访问令牌 2、创建和查看访问令牌 2.1 创建访问令牌 在网站上创建传统令牌 在网站上创建粒度访问令牌 使用CLI创建令牌 CIDR限制令牌错误 查看访问令牌 在网站上查看令牌 在CLI上查看令牌 令牌属性 1、关于访问令…

根据二叉树创建字符串

题目:给你二叉树的根节点 root ,请你采用前序遍历的方式,将二叉树转化为一个由括号和整数组成的字符串,返回构造出的字符串。 空节点使用一对空括号对 "()" 表示,转化后需要省略所有不影响字符串与原始二叉树之间的一对…

centos7安装phpipam1.4

by:铁乐与猫 date:2021-5-11 安装依赖 sudo yum install epel-release sudo yum install php-mcrypt安装 Apache, MySQL, PHP (LAMP) stack packages sudo yum install httpd mariadb-server php php-cli php-gd php-common php-ldap php-pdo php-pear php-snmp …

Dubbo简介

1. Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只…

【计算机网络】——数据链路层

二、组帧 1、字符计数法 帧头部使用一个字符来表示帧的大小(包括第一个计数字符) (此处一字符一个字节) 2、字符填充收尾定界法 特定字符来定界帧的首和尾。若帧中数据段出现等同于特定字符的字符内容,前置一个转义字符。(类似于正则表达…

微信小程序中键盘弹起输入框自动跳到键盘上方处理

效果展示 键盘未弹起时 键盘弹起后: 实现方式 话就不多说了 我直接贴代码了 原理就是用你点击的输入框的底部 距离顶部的位置 减去屏幕高度除以2,然后设成负值,再将这个值给到最外层相对定位的盒子的top属性,这样就不会出现顶…

jvm——垃圾回收机制(GC)详解

开始之前有几个GC的基本问题 什么是GC? GC 是 garbage collection 的缩写,意思是垃圾回收——把内存(特别是堆内存)中不再使用的空间释放掉;清理不再使用的对象。 为什么要GC? 堆内存是各个线程共享的空间…

flutter开发实战-just_audio实现播放音频暂停音频设置音量等

flutter开发实战-just_audio实现播放音频暂停音频设置音量等 最近开发过程中遇到需要播放背景音等音频播放,这里使用just_audio来实现播放音频暂停音频设置音量等 一、引入just_audio 在pubspec.yaml引入just_audio just_audio: ^2.7.0在iOS上,video_p…

CI/CD流水线实战

不知道为什么,现在什么技术都想学,因为我觉得我遇到了技术的壁垒,大的项目接触不到,做的项目一个字辣*。所以,整个人心浮气躁,我已经得通过每天的骑行和长跑缓解这种浮躁了。一个周末,我再次宅在…

Docker容器基础

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、Docker概述1、docker是什么2、Docker的设计宗旨3、容器在内核中支持2种重要技术: 三、Docker的核心概念四、Docker相关命令1.安装依赖包2.设置阿里云…

STM32 F103C8T6学习笔记2:GPIO的认识—GPIO的基本输入输出—点亮一个LED

今日继续学习使用 STM32 F103C8T6开发板 点亮一个LED灯,文章提供源码,测试工程,实验效果图,希望我的归纳总结会对大家有帮助~ 目录 GPIO的认识与分类 : 引脚安排整理: 定时器的引脚例举: …

Linux:shell脚本 正则表达式与AWK

一、正则表达式 由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能,类似于增强版的通配符功能,但与通配符不同,通配符功能是用来处理文件…

硬件产品经理:从入门到精通(新书发布)

目录 简介 新书 框架内容 相关课程 简介 在完成多款硬件产品从设计到推向市场的过程后。 笔者于2020年开始在产品领域平台输出硬件相关的内容。 在这个过程中经常会收到很多读者的留言,希望能推荐一些硬件相关的书籍或资料。 其实,笔者刚开始做硬…