当前位置: 首页 > news >正文

SpringBoot整合HTTPS

文章目录

    • 1_Https 的作用
    • 2_获取证书
    • 3_配置项
    • 4_配置类
    • 5_控制类
    • 6_启动类

1_Https 的作用

保护用户的隐私信息安全:

在 HTTP 网站数据以明文方式传输,客户的隐私极容易被盗取和泄露,而部署 SSL 证书,数据以 HTTPS 加密传输,可以保护通信不被第三方监听和窃取,从而保护用户隐私及安全。还可增加用户信任感和提升企业形象。

保护网站的安全性和完整性:

HTTPS 是安全套接层超文本传输协议,可以保证网站的信息从用户浏览器到服务器之间的传输是高强度加密传输的,是不会被第三方窃取和篡改的,还能避免网站被劫持而插入广告等,防止被钓鱼网站攻击,从而保护网站的安全性和完整性

防止被钓鱼网站攻击,有效识别网站真实身份:

http 网站会被浏览器标记 “不安全”,而安装 https 证书会取消这种 “不安全” 的警告,能增加访客信任度。同时对于安装了 OV SSL 证书或 EV SSL 证书的网站,还能向用户证明网站的真实身份,防止网站被钓鱼网站仿冒。

2_获取证书

需要在 SSL 证书颁发机构处申请或购买 SSL 证书,并下载对应的 .pem.key 文件。

由于只是进行本地测试,所以这里将使用JDK1.8 开发工具包 bin 目录下的keytool.exe工具生成ssl密钥:

keytool -genkeypair -alias myalias -keyalg RSA -keysize 2048 -storetype PKCS12 -keystore keystore.p12 -validity 3650 -storepass your-password

  • -genkeypair : 表示创建密钥。
  • -alias: 保存时的别名。
  • -keyalg:加密算法选择,这里使用RSA。
  • -keysize:秘钥大小,是有固定要求的。
  • -storetype:秘钥存储库的类型。
  • -keystore:密钥的存放位置。
  • -validity:有效时间,单位是天。
  • -storepass:密钥库口令。

可以使用代码验证秘钥生成是否正确,如:

package org.example;import java.io.FileInputStream;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;public class KeystoreExample {public static void main(String[] args) {String keystorePath = "path/to/your/keystore.p12";char[] keystorePassword = "your-keystore-password".toCharArray();try (FileInputStream fis = new FileInputStream(keystorePath)) {KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());keystore.load(fis, keystorePassword);System.out.println("密钥库加载成功");} catch (java.io.IOException e) {System.err.println("密钥库加载失败: " + e.getMessage());} catch (NoSuchAlgorithmException | CertificateException | KeyStoreException e) {System.err.println("可能是密码错误导致的解密失败");e.printStackTrace();}}
}

或者使用keytool.exe工具进行验证

keytool -list -v -keystore  keystore.p12

3_配置项

application.properties

server.port=8081
server.error.path=/log
server.servlet.session.timeout=30s
# 设置应用程序的上下文路径为 /test002。这意味着所有以 /test002 开始的 URL 都将被认为属于这个应用程序。
server.servlet.context-path=/test002
server.tomcat.uri-encoding=UTF-8
server.tomcat.threads.max=500
# 表示秘钥存储库的类型
server.ssl.key-store-type=PKCS12
# 表示 SSL 密钥存储库的名称为 keystore.p12
server.ssl.key-store=classpath:ssl/keystore.p12
# 表示 SSL 密钥别名为 myalias  。
server.ssl.key-alias=myalias
# 这行设置的是 SSL 密钥存储库的密码为 your-password
# 密码不能特别简单,不然项目启动时会出现异常
server.ssl.key-store-password=your-password

其中,server.port 配置 HTTPS 监听端口。server.ssl.key-store 配置证书存放路径,server.ssl.key-store-password 配置证书密码,server.ssl.key-store-typeserver.ssl.key-alias 分别指定证书的类型和别名。

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>spring_Back</artifactId><version>1.0-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.9.RELEASE</version><relativePath/></parent><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies></project>

4_配置类

package org.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.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class TomcatConfig {/*** 设置 Tomcat 的Server配置* @return*/@BeanTomcatServletWebServerFactory tomcatServletWebServerFactory(){TomcatServletWebServerFactory myFactory = new TomcatServletWebServerFactory(){//创建一个安全约束对象@Overrideprotected void postProcessContext(Context context) {SecurityConstraint constraint = new SecurityConstraint();constraint.setUserConstraint("CONFIDENTIAL");//设置为机密级别SecurityCollection connection = new SecurityCollection();//设置一个安全连接对象//作用到所有路由上connection.addPattern("/*");//加入 connection 对象到安全路由中去constraint.addCollection(connection);context.addConstraint(constraint);}};//配置HTTPS连接器myFactory.addAdditionalTomcatConnectors(createConnector());return myFactory;}/*** 创建一个连接兼容Https请求* @return*/private Connector createConnector(){//tomcat 9 中//tomcat/conf/server.xml中不要使用org.apache.coyote.http11.Http11AprProtocol//要用HTTP/1.1Connector connector = new Connector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL);//"HTTP/1.1"connector.setScheme("http");connector.setPort(8080);connector.setSecure(false);//关闭ssl检查//设置跳转到8081 的端口connector.setRedirectPort(8081);return connector;}
}

这段代码创建了一个 Tomcat Servlet 容器,并配置了一个 HTTPS 连接器。其中 redirectConnector() 方法实现了将 HTTP 请求重定向到 HTTPS 的功能。

  • 启动项目:完成上述配置后,重新启动项目,就能够在 HTTPS 协议下访问 Web 应用了。

需要注意的是,在实际生产环境中,还需要配置服务器的防火墙、负载均衡等相关组件,保证 HTTPS 的安全性和稳定性。

5_控制类

package org.example.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class FirstController {@GetMapping("/hey")public String hey(){return "hey main";}
}

6_启动类

package org.example;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;@EnableAutoConfiguration
@ComponentScan
public class MyApp {public static void main(String[] args) {SpringApplication.run(MyApp.class,args);}
}

此时使用 http 协议访问 8080 端口将跳转到 https 协议下的 8081端口。

相关文章:

SpringBoot整合HTTPS

文章目录 1_Https 的作用2_获取证书3_配置项4_配置类5_控制类6_启动类 1_Https 的作用 保护用户的隐私信息安全&#xff1a; 在 HTTP 网站数据以明文方式传输&#xff0c;客户的隐私极容易被盗取和泄露&#xff0c;而部署 SSL 证书&#xff0c;数据以 HTTPS 加密传输&#xf…...

LVGL-从入门到熟练使用

LVGL简介 LVGL&#xff08; Light and Versatile Graphics Library &#xff09;是一个轻量、多功能的开源图形库。 1、丰富且强大的模块化图形组件&#xff1a;按钮 、图表 、列表、滑动条、图片等 2、高级的图形引擎&#xff1a;动画、抗锯齿、透明度、平滑滚动、图层混合等…...

【MySQL数据库】MySQL读写分离

文章目录 读写分离概念读写分离的动机读写分离的适用场景主从复制与读写分离MySQL 读写分离原理MySQL读写分离的实现方式代表性程序 MySQL读写分离实验搭建 MySQL 读写分离Amoeba 服务器配置测试读写分离 问答 读写分离 概念 读写分离是为了优化数据库性能&#xff0c;通过将…...

深度学习:简单计算图的反向传播传递导数计算

问题&#xff1a; 太郎在超市买了2个100日元一个的苹果&#xff0c;消费税是10%&#xff0c;请计算支付金额。 反向传播使用与正方向相反的箭头&#xff08;粗线&#xff09;表示。反向传播传递“局部导数”&#xff0c;将导数的值写在箭头的下方。在这个例子中&#xff0c;反向…...

学习AJAX请求(初步)24.10.21-10.23

1.AJAX概念 AJAX Asynchronous JavaScript and XML&#xff08;异步的 JavaScript 和 XML&#xff09;。 AJAX 最大的优点是在不重新加载整个页面的情况下&#xff0c;可以与服务器交换数据并更新部分网页内容。 虽然所有的AJAX请求都是HTTP请求&#xff0c;但并非所有的HT…...

初识算法——二分查找

1.概念 二分查找算法也称折半查找&#xff0c;是一种非常高效的工作于有序数组的查找算法。 需求&#xff1a;在有序数组 A A A 内&#xff0c;查找值 t a r g e t target target 如果找到返回索引如果找不到返回 − 1 -1 −1 前提给定一个内含 n n n 个元素的有序数组…...

深入剖析 Java Spring 中的 @Autowired、@Resource、@Qualifier、@Inject 注解:使用详解与注意事项

文章目录 Autowired&#xff1a;Spring 最常用的注解1. 作用与简介2. 使用示例3. 注意事项 Resource&#xff1a;按名称注入的利器1. 作用与简介2. 使用示例3. 注意事项 Qualifier&#xff1a;解决多 bean 注入问题1. 作用与简介2. 使用示例3. 注意事项 Inject&#xff1a;标准…...

ThingsBoard规则链节点:Delete Attributes节点详解

引言 删除属性节点简介 用法 含义 应用场景 实际项目运用示例 智能家居安全系统 物流跟踪解决方案 工业自动化生产线 结论 引言 ThingsBoard是一个开源的物联网平台&#xff0c;它提供了设备管理、数据收集与处理以及实时监控等功能。其中&#xff0c;规则引擎是其核心…...

关于作为面试官以及如何准备面试的一些心得

关于作为面试官以及如何准备面试的一些心得 一、面试官&#xff08;我站在前端角度来说&#xff09; 当作为这样身份的时候&#xff0c;我想第一步应该是自己梳理一些从简到难、从点到面的问题 CSS - JS - 框架 - 项目 从这四个角度出发&#xff0c;一步一步的引导面试者的思…...

Bean对象 和 普通对象 的区别

Bean对象 和 普通对象 的区别 前言Bean的概念与new创建的对象的区别Spring Bean的优势两者使用的关键点总结 前言 在Spring框架中&#xff0c;我们通常将Spring容器管理的对象称为“Bean”或“Bean对象”。而通过new关键字创建的对象则被称为“对象”或“普通对象”。 Bean的…...

lego-loam featureAssociation 源码注释(二)

咱们接着往下看initializationValue();&#xff01;&#xff01;&#xff01; FeatureAssociation():nh("~"){subLaserCloud nh.subscribe<sensor_msgs::PointCloud2>("/segmented_cloud", 1, &FeatureAssociation::laserCloudHandler, this);s…...

Claude 3.5 的六大应用场景

Claude 3.5 的六大应用场景 随着人工智能技术的飞速发展&#xff0c;Claude 3.5 已经成为一款强大的语言模型工具&#xff0c;在多个领域展现了其卓越的应用潜力。本文将通过CSDN格式&#xff0c;介绍Claude 3.5在六大主要领域的实际应用场景&#xff0c;帮助开发者和企业更好…...

进程线程知识总结

1. 程序什么时候应该使用线程&#xff0c;什么时候单线程效率高 使用线程&#xff1a;在I/O密集型或高并发的场景&#xff0c;例如网络服务、文件读写等。通过多线程可以同时处理多个任务&#xff0c;提高利用率。单线程效率高&#xff1a;在CPU密集型任务中&#xff0c;当任务…...

Rsync数据复制/备份服务应用

文章目录 1. rsync概述1.1 什么是Rsync1.2 rsync的功能1.3 rsync 的功能特性1.4 Rsync 增量复制原理1.5 生产场景架构集群备份方案 2. Rsync工作方式介绍与实践2.1 本地数据传输模式2.1.1 本地数据传输模式语法2.1.2 本地数据传输模式实践 2.2 远程Shell 数据传输模式2.2.1 远程…...

如何为自己的跨境网站添加多国语言翻译功能及推荐起尔网定制与插件开发

如何为自己的跨境网站添加多国语言翻译功能及推荐起尔网定制与插件开发 在全球化的浪潮下&#xff0c;跨境电商成为越来越多企业拓展国际市场的重要途径。然而&#xff0c;语言障碍成为了一个不可忽视的问题。为了更好地服务全球用户&#xff0c;为自己的跨境网站添加多国语言…...

安全见闻(3)——开阔眼界,不做井底之蛙

内容预览 ≧∀≦ゞ 安全见闻三&#xff1a;脚本程序与病毒声明导语脚本语言BAT/PowerShell脚本木马与宏病毒脚本病毒BIOS病毒 结语 安全见闻三&#xff1a;脚本程序与病毒 声明 学习视频来自B站UP主 泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只…...

MySQL 的意向锁(Intention Locks)原理详解

1. 背景&#xff1a;为什么需要意向锁&#xff1f; MySQL 中意向锁的主要作用是用于支持行级锁与表级锁的并存&#xff0c;特别是在 InnoDB 存储引擎中。InnoDB 提供了行级锁&#xff0c;而在某些场景下&#xff0c;数据库系统仍需要对整张表加锁&#xff0c;例如 LOCK TABLES …...

31个省份农业科技水平(农业技术创新或农业科技专利数据)2010-2022年

一、测算方式&#xff1a;参考C刊《湖北大学学报(哲学社会科学版)》张金鑫&#xff08;2020&#xff09;老师的做法&#xff0c;采用农业( 农林牧渔业) 三类专利总和来衡量农业技术创新 二、资料范围&#xff1a;31个省份&#xff0c;403个观测值&#xff0c;已经整理成面板数…...

Python代码执行失败问题及解决方案

目录 一、Python代码执行失败的原因 二、常见的Python错误类型 1. 语法错误&#xff08;SyntaxError&#xff09; 2. 运行时错误&#xff08;RuntimeError&#xff09; 3. 类型错误&#xff08;TypeError&#xff09; 4. 导入错误&#xff08;ImportError&#xff09; 5…...

Java 遗传算法

遗传算法&#xff08;Genetic Algorithm, GA&#xff09;是一种基于自然选择和遗传学原理的优化算法&#xff0c;用于求解复杂的搜索和优化问题。在Java中实现遗传算法通常包括以下几个步骤&#xff1a; 初始化种群&#xff1a;生成一组随机解作为初始种群。适应度评估&#x…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

wpf在image控件上快速显示内存图像

wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像&#xff08;比如分辨率3000*3000的图像&#xff09;的办法&#xff0c;尤其是想把内存中的裸数据&#xff08;只有图像的数据&#xff0c;不包…...

windows系统MySQL安装文档

概览&#xff1a;本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容&#xff0c;为学习者提供全面的操作指导。关键要点包括&#xff1a; 解压 &#xff1a;下载完成后解压压缩包&#xff0c;得到MySQL 8.…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文通过代码驱动的方式&#xff0c;系统讲解PyTorch核心概念和实战技巧&#xff0c;涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...

离线语音识别方案分析

随着人工智能技术的不断发展&#xff0c;语音识别技术也得到了广泛的应用&#xff0c;从智能家居到车载系统&#xff0c;语音识别正在改变我们与设备的交互方式。尤其是离线语音识别&#xff0c;由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力&#xff0c;广…...

Xela矩阵三轴触觉传感器的工作原理解析与应用场景

Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知&#xff0c;帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量&#xff0c;能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度&#xff0c;还为机器人、医疗设备和制造业的智…...