SpringBoot配置https

news2024/11/28 12:43:50

1.Https配置

由于HTTPS具有良好的安全性,在开发中得到了越来越广泛的应用,像微信公众号、小程序等的开发都要使用HTTPS来完成。对于个人开发者而言,一个HTTPS 证书的价格还是有点贵,但是呢,国内的一些云服务器厂商提供免费的HTTPS证书,一个账号可以申请数个,当然,在jdk中提供了一个Java数字证书,我可以也可以利用这个工具生成一个数字证书。

1.1 申请证书

申请证书的方式有两种:

  • 1.申请免费的阿里云证书
  • 2.利用jdk工具生成证书

1.1.1 申请免费的阿里云证书

但是这个要求用户有域名,没有域名的可以选择自行跳过这种方法了。

进入阿里云官网,搜索ssl
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

接下来点击证书申请
在这里插入图片描述

点击下一步,会有DNS校验,你只需要按照他的提示进行相应的校验即可,因为我的域名也过期了,等弄好之后在更新本小节,下面重点讲一下如何利用jdk去生成证书。

1.1.2 利用jdk生成证书

在cmd中输入:

keytool -genkey -alias tomcathttps -keyalg RSA -keysize 2048 -keystore sang.p12 -validity 365

在这里插入图片描述

密钥口令自己随便输一个,比如:123456

  • genkey表示要创建一个新的密钥。
  • alias表示keystore的别名。
  • keyalg表示使用的加密算法是RSA,一种非对称加密算法。
  • keysize表示密钥的长度。
  • keystore表示生成的密钥存放位置。
  • validity表示密钥的有效时间,单位为天。

以上 指令执行成功以后 会在当前目录下生成一个sang.p12的文件
在这里插入图片描述

2.项目配置

然后将这个文件复制到resource根目录
在这里插入图片描述

然后在application.properties中下做以下配置

# key-store表示密钥文件名。
server.ssl.key-store=classpath:sang.p12 
# key-alias表示密钥别名。
server.ssl.key-alias=tomcathttps
#key-store-password 就是在cmd命令执行过程中输入的密码。
server.ssl.key-store-password=123456

配置好以上信息之后,可以启动项目访问:http://localhost:8080
在这里插入图片描述

此时,如果以 HTTP 的方式访问接口,就会访问失败,但是如果我们改成访问:https://localhost:8080/
在这里插入图片描述

可以看到访问没有任何问题了,这样的话我们的后端服务就只支持https的请求访问了。

当然了,如果你还想让项目既支持https请求也支持http请求,可以通过配置重定向的方式,因为 Spring Boot 不支持同时在配置中启动 HTTP HTTPS。

配置方式如下:

mport 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.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class TomcatConfig {
    @Bean
    TomcatServletWebServerFactory tomcatServletWebServerFactory() {
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory() {
            @Override
            protected void postProcessContext(Context context) {
                SecurityConstraint constraint = new SecurityConstraint();
                constraint.setUserConstraint("CONFIDENTIAL");
                SecurityCollection collection = new SecurityCollection();
                collection.addPattern("/*");
                constraint.addCollection(collection);
                context.addConstraint(constraint);
            }
        };
        factory.addAdditionalTomcatConnectors(createTomcatConnector());
        return factory;
    }

    private Connector createTomcatConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setPort(8082);
        connector.setSecure(false);
        connector.setRedirectPort(8080);
        return connector;
    }
}

相当于我们一个服务同时启动了两个端口,即:8080,,8082,如果我们通过http的方式去访问8082,那么就会重定向到https请求的8080

至此,我们将后端的服务改造为https就结束了。

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

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

相关文章

android studio 项目生成apk的几个问题(备忘)

终于自己做的一个小东西要做完了,最后一步是生成apk,这之前遇到几个问题备忘一下。 1、安装完成后有两个图标,分别是两个activity,卸载一个,另一个也没了。 原因:我原来做一时候没有欢迎界面,…

总结数据结构常用树

树:只有一个根节点,有孩子结点,父节点 二叉树:每个节点最多有两个孩子结点。 二分搜索树:也叫二叉排序树,首先它是一颗二叉树,且左右孩子都存在时,左孩子都小于当前节点值&#xf…

计算机数制(进制转换,原码,反码,补码,真值)

目录 区分进制 带小数点的进制转化 进制转换练习 符号数的表示方法 区分: 考点:给你原码转换补码,补码最负的数的表示,0的表示 原码,反码,补码练习 区分进制 注意微机原理这门课用的是后缀的方式&#xff0…

小学生python游戏编程arcade----碰撞精灵消失问题

小学生python游戏编程arcade----碰撞精灵消失问题前言碰撞精灵消失问题1、多余的精灵不能及时消失1.1 问题1.2 失败代码1.3 记录备忘1.4 代码实现2、放置位置2.1 代码放在ondraw中可以2.2 在update中也可以2.3 碰撞中3、玩家子弹击中敌坦克后的爆炸效果3.1 爆炸类3.2 爆炸列表准…

2022年铁路行业研究报告

第一章 行业概况 铁路运输是主要的陆上交通运输方式之一,铁路是指在综合交通运输体系中,用于运行火车等交通工具行驶的轨道线路。铁路运输是主要的陆上交通运输方式之一,是通过机车牵引车辆组成列车在铁轨上运送客或货的一种运输方式。相比其…

AVL双旋转思路分析与图解

AVL树双旋转思路分析与图解 首先我们要知道什么情况之下我们是要进行双旋转? 当最小不平衡子树为LR型或者RL型的时候, 那么什么时候最小不平衡子树是RL型或者什么时候又是LR型的? 下面我们就先给出LR型, RL型, LL型, RR型最小不平衡子树的概念: LR型最小不平衡子树: 首先拿…

Linux 动静态库

目录 静态库和动态库 gcc规则使用动静态库的规则: 制作静态库 使用静态库 方法1. 方法2. 制作动态库 使用动态库 方法1: 方法2: 方法3: 方法4: 进程,静态库,动态库 静态库和动态库 …

传统瀑布模型和实际瀑布模型

传统瀑布模型: 瀑布模型是所有模型的基础框架 特点: 线性的开发流程,不能够应对需求的变化。 必须等前一阶段的工作完成后,才能开始后一阶段的工作 前一阶段的输出文档就是后一阶段的输入文档,因此只有前一阶段的输…

Map及其实现类、锁

HashMap、HashTable、ConcurrentHashMap 区别 一.HashMap和HashTable的区别 1、两者父类不同 HashMap是继承自AbstractMap类,而Hashtable是继承自Dictionary类。不过它们都实现了同时实现了map、Cloneable(可复制)、Serializable&#xff0…

朱松纯教授场景理解相关文章简介

朱松纯教授场景理解相关文章简介 Holistic 3D Scene Parsing and Reconstruction from a Single RGB Image 基于单张图像的整体场景解译与重建 我们提出了一个计算框架来联合解译单帧RGB图像,通过使用一系列的随机语法模型生成的CAD模型构成整体的3D结构。具体地说…

智慧农业SaaS系统

真正的大师,永远都怀着一颗学徒的心! 一、项目简介 智慧农业SaaS系统 二、实现功能 监控管理:支持海康摄像头监控。 用户管理:支持用户是系统操作者,该功能主要完成系统用户配置。 岗位管理:支持配置系统用户所属担…

bugku渗透测试 1 writeup(无需VPS)

靶场地址:BugKu渗透测试1 该靶场只需要20金币就可以开启两小时,算的上非常良心实惠了,趁着有空赶紧刷一刷题目 目录 第一场景: 第二场景: 第三场景: 第四场景: 第五场景: 第六…

第五章:面向对象(上)

第五章:面向对象(上) 5.1:面向过程与面向对象 面向过程(POP)与面向对象(OOP) ​ 二者都是一种思想,面向对象是相对于面向过程而言的。面向过程,强调的是功能行为,以函数为最小值,考虑怎么做。面向对象&…

【BOOST C++ 线程】boost::thread库的基本使用方法总结

一、说明 boost::thread的六种使用方法总结,本文初步介绍线程的函数、构造、执行的详细解释。 二、boost::thread的几个函数 函数功能join()让主进程等待子线程执行完毕后再继续执行get_id()获得线程的 id 号detach()标线程就成为了守护线程,驻留后台运…

【项目实战:核酸检测平台】第二章 大卸八块

本章目标 完成项目架构设计和数据库结构设计 重点:全是重点 文章目录本章目标总体设计(架构设计)技术选型部署结构设计工程文档结构设计第一步:项目和模块命名第二步:约定项目工程文件内容第三步:设计文档…

Hadoop高可用环境搭建-HDFSNameNode高可用搭建、Yarn高可用搭建

本文环境搭建的前提条件:JDK、Zookeeper、Hadoop完全分布式环境搭建完成。如果未满足条件且不会搭建,可以前往博主的主页搜索相关文章进行搭建。 目录 一、HDFSNameNode高可用搭建 二、 Yarn高可用搭建 本文主节点hostname:master&#xff0c…

安装semantic segmentation editor

两天啊, 整整两天,知道这两天我是怎么过的吗??1 步骤概述(以下命令行都是在管理员条件下执行)1.1 安装choco1.2 安装meteor1.3 安装semantic segmentation editor2过程3 我还是用Ubuntu安装过3.1Window安装…

【Mysql】主从一致

【Mysql】主从一致(一)主从复制【1】什么是主从复制【2】为什么需要主从复制【3】mysql复制原理【4】具体步骤【5】mysql主从形式【6】具体操作过程(1)首先在虚拟机服务器上安装mysql,进行简单的配置(2&…

力扣(LeetCode)38. 外观数列(C++)

双指针模拟 初始字符串 sss 已给定,根据 sss 构造下一个外观数列 ttt ,构造完毕, ststst ,循环 n−1n-1n−1 次,构造出一个外观数列。 构造步骤 : 令 jjj 指向当前元素 , kkk 从 jjj 往右,记录…

新库上线 | CnOpenData招聘公司基本信息扩展数据

招聘公司基本信息扩展数据 一、数据简介 线上招聘是指各公司将其岗位需求、工作地点能力要求和薪酬等招聘信息发布在互联网上,供求职者参考,以线上的方式进行招聘。线上招聘网站是通过互联网相关技术,集结这些线上招聘信息,帮助雇…