总结:如何在SpringBoot中使用https协议以及自签证书?

总结:如何在SpringBoot中使用https协议以及自签证书?

  • 前提一:什么是http协议?
  • 前提二:什么是https协议?
  • 一·生成自签证书
  • 二· 将证书转换为PKCS12格式
  • 三· 配置SpringBoot
    • (1)修改配置文件:application.properties或application.yml
    • (2) 配置HTTP重定向到HTTPS(可选)
    • (3)控制器示例代码:
    • (4)完整项目结构
  • 四·验证成功
    • (1)启动Spring Boot应用:
    • (2)处理浏览器警告
    • (3)使用https协议访问:https://localhost:8443/hello(浏览器会提示证书不安全,点击“继续”即可)。
    • (4)使用http协议访问:http://localhost:8080/hello,会自动跳转到HTTPS(如果配置了HTTP重定向)
    • (5)使用Java代码发起https请求验证:成功!
    • (6)https工具类代码地址:

前提一:什么是http协议?

https://t4dmw.blog.csdn.net/article/details/123313047

前提二:什么是https协议?

https://t4dmw.blog.csdn.net/article/details/123385750

一·生成自签证书

使用OpenSSL生成自签证书(如果已有证书可跳过此步骤):

openssl req -x509 -newkey rsa:4096 -keyout private_key.pem -out public_cert.pem -days 365 -nodes

生成的文件:

private_key.pem:私钥文件。

public_cert.pem:证书文件,包含公钥。

在这里插入图片描述
在这里插入图片描述

二· 将证书转换为PKCS12格式

Spring Boot需要PKCS12格式的证书文件(.p12或.pfx)。使用以下命令转换:

openssl pkcs12 -export -in public_cert.pem -inkey private_key.pem -out keystore.p12 -name "mycert"

输入密码:设置证书库密码(如123456)生成keystore.p12文件。
在这里插入图片描述

三· 配置SpringBoot

将证书文件(keystore.p12)复制到Spring Boot项目的src/main/resources目录下。

(1)修改配置文件:application.properties或application.yml

server:ssl:# 开启sslenabled: true# keystore文件key-store: classpath:keystore.p12# keystore格式key-store-type: PKCS12# keystore密码key-store-password: 123456# keystore别名key-alias: mycert# https端口port: 8443

(2) 配置HTTP重定向到HTTPS(可选)

如果希望所有HTTP请求自动重定向到HTTPS,可以添加以下配置,HTTP端口在代码中设置为8080

(2-1) 添加Tomcat配置类

package com.example.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.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @author liumingfu* @date 2020/06/08 22:06* @description: https配置*/
@Configuration
public class HttpsConfig {@Beanpublic ServletWebServerFactory servletContainer() {TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {@Overrideprotected void postProcessContext(Context context) {SecurityConstraint securityConstraint = new SecurityConstraint();securityConstraint.setUserConstraint("CONFIDENTIAL");SecurityCollection collection = new SecurityCollection();collection.addPattern("/*");securityConstraint.addCollection(collection);context.addConstraint(securityConstraint);}};// 添加HTTP连接器,重定向到HTTPStomcat.addAdditionalTomcatConnectors(redirectConnector());return tomcat;}/*** 访问http协议8080端口,重定向到https协议8443端口** @param* @return* @author LiuMingFu* @date 2025/2/14*/private Connector redirectConnector() {Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");connector.setScheme("http");connector.setPort(8080);  // HTTP端口connector.setSecure(false);connector.setRedirectPort(8443);  // HTTPS端口return connector;}
}

(3)控制器示例代码:

控制层

package com.example.controller;import com.example.service.MyService;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** @Description TODO* @Author LiuMingFu* @Date 2025/2/13 17:58*/
@RestController
public class MyController {@Resourceprivate MyService myService;@RequestMapping("/hello")public String getHello(){return myService.getHello();}
}

service接口层

package com.example.service;import org.springframework.stereotype.Service;/*** @Description TODO* @Author LiuMingFu* @Date 2025/2/13 18:00*/
@Service
public interface MyService {String getHello();
}

service接口实现层

package com.example.service.impl;import com.example.service.MyService;
import org.springframework.stereotype.Repository;/*** @Description TODO* @Author LiuMingFu* @Date 2025/2/13 18:00*/
@Repository
public class MyServiceImpl implements MyService {@Overridepublic String getHello() {return "hello https";}
}

(4)完整项目结构

在这里插入图片描述

四·验证成功

(1)启动Spring Boot应用:

在这里插入图片描述

在这里插入图片描述

(2)处理浏览器警告

  • 自签证书会导致浏览器显示“不安全”警告。在开发环境中,可以手动信任证书:
  • 将public_cert.pem导入浏览器或操作系统的信任库。
  • 对于测试工具(如Postman或curl),添加-k或–insecure参数忽略证书验证。

(3)使用https协议访问:https://localhost:8443/hello(浏览器会提示证书不安全,点击“继续”即可)。

在这里插入图片描述

(4)使用http协议访问:http://localhost:8080/hello,会自动跳转到HTTPS(如果配置了HTTP重定向)

在这里插入图片描述
在这里插入图片描述

(5)使用Java代码发起https请求验证:成功!

注意:使用代码方式,访问的接口域名,必须跟证书的域名地址一致,否则报错
在这里插入图片描述

(6)https工具类代码地址:

https://blog.csdn.net/weixin_48033662/article/details/145640901

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

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

相关文章

JAVA毕业设计212—基于Java+Springboot+vue3的校园运动场馆预约管理系统(源代码+数据库)

毕设所有选题: https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvue3的校园运动场馆预约管理系统(源代码数据库)212 一、系统介绍 本项目前后端分离(可以改为ssm版本),分为用户、管理员两种角色 1、用户&#xff…

在nodejs中使用RabbitMQ(六)sharding消息分片

RabbitMQ 的分片插件(rabbitmq_sharding)允许将消息分布到多个队列中,这在消息量很大或处理速度要求高的情况下非常有用。分片功能通过将消息拆分到多个队列中来平衡负载,从而提升消息处理的吞吐量和可靠性。它能够在多个队列之间…

数据结构 二叉树

一、⼆叉树的定义 ⼆叉树是⼀种特殊的树型结构,它的特点是每个结点⾄多只有2棵⼦树(即⼆叉树中不存在度⼤于2的结点),并且⼆叉树的⼦树有左右之分,其次序不能任意颠倒。 ⼆叉的意思是这种树的每⼀个结点最多只有两个孩…

本地部署DeepSeek集成VSCode创建自己的AI助手

文章目录 安装Ollama和CodeGPT安装Ollama安装CodeGPT 下载并配置DeepSeek模型下载聊天模型(deepseek-r1:1.5b)下载自动补全模型(deepseek-coder:1.3b) 使用DeepSeek进行编程辅助配置CodeGPT使用DeepSeek模型开始使用AI助手 ✍️相…

【NLP】循环神经网络RNN

目录 一、词嵌入层 二、循环网络层 2.1 RNN网络原理 2.2 Pytorch RNN API 自然语言处理(Nature language Processing,NLP)研究的主要是通过计算机算法来理解自然语言。对于自然语言来说,处理的数据主要就是人类的语言&#xf…

利用蓝耘智算平台深度搭建deepseek R1模型,进行深度机器学习

大佬请阅读 前言关于DeepSeek 的显著优点卓越的性能表现低廉的训练成本广泛的应用场景开放的开源策略 DeepSeek 与其他 AI 对比什么是蓝耘智算平台为什么使用蓝耘智算平台搭建我们的deepseek如何使用蓝耘 GPU 智算云平台搭建我们的R1模型并成功进行调用测试11. AVL树节点结构2.…

spring6(完结)

像是八大模式这种,放在后面八股文中再重点了解,对于源码部分也是后面会一起手敲。 个人觉得spring的重点在于注解开发,省去了很多耦合的问题,像是各种事务的管理,和bean类的管理都可以给spring容器管理,注入…

H5自适应响应式代理记账与财政咨询服务类PbootCMS网站模板 – HTML5财务会计类网站源码下载

(H5自适应)响应式代理记账财政咨询服务类pbootcms网站模板 html5财务会计类网站源码下载 为了提升系统安全,请将后台文件admin.php的文件名修改一下。修改之后,后台登录地址就是:您的域名/您修改的文件名.php 模板特点: 1&#x…

Java 大视界 -- 量子计算时代 Java 大数据的潜在变革与应对策略(88)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

[css] 黑白主题切换

link动态引入 类名切换 css滤镜 var 类名切换 v-bind css预处理器mixin类名切换 【前端知识分享】CSS主题切换方案

基于Ceedling的嵌入式软件单元测试

Ceedling 如果你使用 Ceedling(一个针对 C 代码单元测试的构建管理器),可以更方便地管理测试。Ceedling 会自动处理 Unity 和 CMock 的集成,无需手动编写 Makefile。 1.环境搭建 1.1 Ruby环境 sudo apt-get install ruby1.2 安…

Renesas RH850 FDL库集成步骤

文章目录 1. 获取并解压FDL库文件2. 将FDL库文件添加到工程3. 配置工程编译选项4. 配置运行时参数5. 集成API调用到应用程序6. 处理多任务与中断7. 验证与调试常见问题与解决方案总结1. 获取并解压FDL库文件 下载途径:从Renesas官网或提供的安装包获取FDL库(如 RENESAS_FDL_R…

使用 AutoMQ 和 Tinybird 分析用户网购行为

前言 在当前竞争激烈的市场环境中,数据分析已成为企业实现差异化和精准营销的关键。通过分析用户行为数据,企业能够深入了解用户的习惯、偏好和行为模式,从而更精准地定位目标市场,制定个性化营销策略,并提供定制化推…

2.14学习记录

Web flag直接读取不就行了&#xff1f; 代码审计&#xff1a; <?php highlight_file(index.php); # 我把flag藏在一个secret文件夹里面了&#xff0c;所以要学会遍历啊~ error_reporting(0); $J1ng $_POST[J]; $Hong $_POST[H]; $Keng $_GET[K]; $Wang $_GET[W]; $d…

web前端第三次作业

题目 本期作业 WEB第三次作业 请使用JS实一个网页中登录窗口的显示/隐藏&#xff0c;页面中拖动移动&#xff0c;并且添加了边界判断的网页效 代码图片 效果展示 代码 <!DOCTYPE html> <html lang"zh"> <head> <meta charset"UTF-8&qu…

【进阶】MySQL高级篇超详讲解!!!

Mysql服务器内部架构&#xff08;了解&#xff09; 连接层 负责客户端的链接&#xff0c;验证账号密码等授权认证 服务层 对sql进行解析&#xff0c;优化&#xff0c;调用函数&#xff0c;如果是查询操作&#xff0c;有没有缓存等操作。 引擎层 是真正负责数据存储和提取…

数据预处理都做什么,用什么工具

数据预处理是数据分析、数据挖掘和机器学习中的关键步骤&#xff0c;其目的是将原始数据转换为适合后续分析或建模的格式。以下是关于数据预处理的主要内容及常用工具的详细介绍&#xff1a; 一、数据预处理的主要任务 数据预处理的主要任务包括以下几个方面&#xff1a; 数据…

#渗透测试#批量漏洞挖掘#AJ-Report开源数据大屏存在远程命令执行漏洞

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章读。 目录 一、架构解析 技术栈组成: 二、核心功能…

VS2022+OpenVINO的开发环境配置

一、OpenVINO OpenVINO&#xff08;Open Visual Inference and Neural Networks&#xff09;是英特尔公司为开发者提供的一款开源AI工具包&#xff0c;主要用于加速和优化深度学习模型的推理性能。它通过提供高效且轻量级的推理引擎&#xff0c;帮助用户快速部署复杂的视觉任务…

CPT205 计算机图形学 OpenGL 3D实践(CW2)

文章目录 1. 介绍2. 设计3. 准备阶段4. 角色构建5. 场景构建6. 交互部分6.1 键盘交互6.2 鼠标交互6.3 鼠标点击出多级菜单进行交互 7. 缺点与问题7.1 程序bug7.2 游戏乐趣不足7.3 画面不够好看 8. 完整代码 1. 介绍 前面已经分享过了关于CPT205的CW1的2D作业&#xff0c;这次C…