springboot项目开启https协议

news2024/9/22 9:54:43

1、在windows以管理员身份运行cmd,输入如下命令生成证书

keytool -genkey -alias myhttps -keyalg RSA -keysize 2048 -validity 36500 -keystore  "D:/tmp/ssl/myhttps.keystore"

注释

命令:keytool -genkey -alias testhttps -keyalg RSA -keysize 2048 -validity 36500 -keystore  "D:/tmp/ssl/testhttps.keystore"

命令解释:
• -genkey 表示要创建一个新的密钥。 

• -alias 表示 keystore 的别名。 

• -keyalg 表示使用的加密算法是 RSA。

• -keysize 表示密钥的长度.。

• -keystore 表示生成的密钥存放位直。 

• -validity 表示密钥的有效时间,单位为天。

2、将目录下的myhttps.keystore文件移动到resource下面
在这里插入图片描述
3、配置文件

server:
  port: 9987
  non-ssl-port: 8089

# 用于 非ssl请求 强制转成 ssl 请求
# 当使用 访问地址:http://127.0.0.1:8089/hello 访问时 后台会 将请求 转换成 https://127.0.0.1:9987/hello
#  servlet:
#    context-path: /ssl-service

  ssl:
    key-store: classpath:myhttps.keystore  #类路径下的自签证书
    key-alias: myhttps # 证书别名
    key-store-password: 123456 #证书密码
    key-store-type: JKS # 证书类型
    enabled: true  # 开启证书验证

4、配置http强制跳转https配置类

package com.example.springboot3.config;

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

/**
 * @author oukele
 * http 请求 强制跳转成 https
 */
@Configuration
public class HttpToHttpsConfig {
    /**
     * 项目指定的端口号
     */
    @Value("${server.port}")
    private int serverPort;

    /**
     * 用于 非ssl请求 强制转成 ssl 请求 的端口号
     */
    @Value("${server.non-ssl-port}")
    private int port;

    @Bean
    public TomcatServletWebServerFactory servletContainerFactory() {
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
            @Override
            protected void postProcessContext(Context context) {
                //设置安全性约束
                SecurityConstraint securityConstraint = new SecurityConstraint();
                securityConstraint.setUserConstraint("CONFIDENTIAL");
                //设置约束条件
                SecurityCollection collection = new SecurityCollection();
                //拦截所有请求
                collection.addPattern("/*");
                securityConstraint.addCollection(collection);
                context.addConstraint(securityConstraint);
            }
        };
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        //设置将分配给通过此连接器接收到的请求的方案
        connector.setScheme("http");

        //true: http使用http, https使用https;
        //false: http重定向到https;
        connector.setSecure(false);

        //设置监听请求的端口号,这个端口不能其他已经在使用的端口重复,否则会报错
        connector.setPort(port);

        //重定向端口号(非SSL到SSL)
        connector.setRedirectPort(serverPort);

        tomcat.addAdditionalTomcatConnectors(connector);
        return tomcat;
    }
}

5、在浏览器中测试
在这里插入图片描述

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

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

相关文章

蓝牙资讯|苹果Beats Studio Pro耳机曝光,支持苹果和谷歌的查找功能

国外科技媒体9to5Mac曝光苹果Beats Studio Pro耳机,这款耳机配备了 2 个定制的 40 毫米驱动单元,即便是在最高音量下,也能确保不会失真。Beats Studio Pro 还将配备集成的数字处理器,该处理器“优化最终频率响应,以获得…

Jetpack 架构组件你了解多少?

本文是我在学习Jetpack的过程中做的一些记录,如有错误,欢迎指正 本文包含了 ViewModel、Lifecycles、LiveData、Room、WorkManager 的相关用法,你可以通过目录直接跳转到你想了解的地方 ViewModel 简单介绍下 ViewModel:ViewMode…

DataWhale: LLM+KG

https://mp.weixin.qq.com/s/MIi1WrAwfmqnXGlkQq8DqQ

硬件性能 - 网络瓶颈分析

简介 本文章主要通过Linux命令查看网络信息、判断是否出现网络瓶颈等简单分析方法。 目录 1. 监控命令 sar 2. 带宽利用率 3. 网络延迟 4. 网络连接数 5. 模拟网络故障 1. 监控命令 sar sar 命令实时查看网络情况(详细命令:Linux性能监控命令_sar …

靠着这份 Java 面试题跟答案,我从 14K 变成了 28K!

LZ 认为,对于 Java 面试以及进阶的最佳学习方法莫过于刷题博客书籍总结,前三者 LZ 将淋漓尽致地挥毫于这篇文章中,至于总结在于个人,实际上越到后面你会发现面试并不难,其次就是在刷题的过程中有没有去思考&#xff0c…

【QT】——事件处理系统

目录 1.事件介绍 2.QT事件的产生 3.事件处理函数 3.1鼠标事件 3.2键盘事件 3.3窗口重绘事件 3.4窗口关闭事件 3.5窗口大小变化事件 4. 重写事件处理函数 1.事件介绍 QT 程序是事件驱动的, 程序的每个动作都是由内部某个事件所触发。QT 事件的发生和处理 成为程序运行的…

数据质量管理之ETL中的挑战与解决方案

摘要:在数据驱动的时代,数据质量管理是企业成功的关键因素之一。在ETL(Extract, Transform, Load)过程中,数据质量问题可能会导致数据失真、决策错误和业务损失。本文将探讨ETL中常见的数据质量挑战,并提供…

CSS入门.

目录 基础入门基础语法 1.基础入门 什么是 CSS CSS 指层叠样式表(Cascading Style Sheets)样式通常存储在样式表中 为什么要使用 CSS 样式定义如何显示 HTML 元素为了解决内容与表现分离的问题主要目的:可以让相同的一个页面在不同的浏…

linux服务配置ssh免密

一、常用场景 1、我们经常使用scp命令在两台不同服务器之间进行文件传输,但每执行一次scp命令时,都需要输入一次密码;使用ssh命令远程连接另一台服务器时,也需要输入密码。频繁输入密码比较麻烦,ssh可帮助我们在两台服…

【python】array数组添加一行或一列数据

目录 0.环境 1.背景 2.具体实现 2.1思路 2.2具体实现 2.2.1 增加一列 2.2.2增加一行 3. 完整代码 0.环境 windows jupyter notebook跑代码 1.背景 在实现数据可视化的时候,用了numpy的array类型的数组,需要手动在最后增加一列数据,所以…

[oeasy]python0071_字符串类型_str_string_下标运算符_中括号

帮助手册 回忆上次内容 上次 分辨了 静态类型 语言动态类型 语言 python 属于 对类型要求 没有那么严格的 动态类型 语言 对 初学者很友好不过很多时候 也容易 弄不清变量类型 直接 修改代码 增强 程序的可读性把变量的类型 明确标记在 变量名上 就像 把缩进 作为程序块的分…

VisualSVN Server安装步骤

一.下载 官网:VisualSVN - Subversion-based version control for Windows 二.安装 双击安装 先创建好文件夹路径,建议放在同一个根目录下 三.安装成功,运行打开界面如图 四.创建项目 右键Repositories 选择Customize pemissions&#xff0…

浅拷贝、深拷贝、引用拷贝

目录 1.浅拷贝 2.深拷贝 3.引用拷贝 4.代码示例 5.总结 浅拷贝、深拷贝和引用拷贝是在编程中用来 复制对象或数据 的三种不同方式。 1.浅拷贝 浅拷贝(Shallow Copy):浅拷贝创建一个新对象,其中包含原始对象的引用。这意…

Oracle数据类型与表管理

Oracle数据类型与表管理 前言 1、Oracle数据类型 2、 建表 3、表删除 4、表的修改 1、Oracle数据类型 2、 建表 Create table 表名( 字段 1 数据类型 [default 默认值], 字段 2 数据类型 [default 默认值], … 字段 n 数据类型 [default 默认值] ) -…

d3dx9_30.dll丢失怎么解决

在解决d3dx9_30.dll丢失问题之前,我们首先需要了解d3dx9_30.dll的作用。d3dx9_30.dll是DirectX的一个核心文件,它提供了许多与图形和多媒体相关的函数和特性。它在许多游戏和图形应用程序中被广泛使用。 d3dx9_30.dll丢失的解决方法 打开计算机电脑浏览…

selenium自动化测试之八种定位元素方法

目录 八大定位方法 id定位 name定位 tag定位 class定位 link_text定位 partial_link定位 xpath定位 Css_selector定位 总结: 自动化最基础的就属于定位元素了,元素不会定位,基本上已经团灭了,就不用再去考虑什么自动化了…

9.12UEC++日志输出

1. 调用:GEngine; 2.TEXT宏: 3. Vs使用: 演示: 日志文件夹: 自定义日志: 声明: 定义:

力扣 51. N 皇后

题目来源&#xff1a;https://leetcode.cn/problems/n-queens/description/ C题解1&#xff1a;回溯法。用一个vector<vector<int>> qmap(n, vector<int>(n, 0))标记后面行不能使用的位置&#xff0c;每次递归下一层为下一行的位置&#xff0c;直到达到n行&a…

html案例2

效果 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, initia…

【mysql实践】如何查看阿里云RDS的MySQL库中的binlog日志

背景&#xff1a; 工作中我们为了查看MySQL中数据修改的历史记录时&#xff0c;会通过查看binlog日志。但由于binlog日志是二进制文件&#xff0c;需要解析之后&#xff0c;才能用文本查看工具打开。这次笔者使用flink进行实时统计时就多次遇到了这个问题。经常看笔者最近博客…