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

Web安全之HTTPS调用详解和证书说明案例示范

随着互联网的高速发展,网络安全成为了一个不可忽视的话题,特别是在涉及用户敏感信息的业务系统中。在此背景下,使用HTTPS取代HTTP成为了大势所趋。本文将以电商交易系统为例,详细介绍HTTPS的重要性,并探讨如何通过HTTPS来提升网站的安全性。

第一章 HTTPS的必要性

问题:HTTP的不足与风险

在传统的HTTP协议中,数据以明文形式在客户端与服务器之间传输。这意味着任何具有中间人攻击能力的人(如网络运营商、黑客)都可以截获和修改这些数据。例如,当用户在电商网站上输入信用卡信息时,如果使用HTTP传输,这些敏感信息就有可能被拦截,进而导致严重的安全问题。

示例:

假设用户在电商网站进行结算,页面使用HTTP协议。黑客通过网络嗅探工具拦截用户的请求包,轻而易举地获取用户的信用卡号和支付信息。之后,黑客可能会使用这些信息进行非法交易,给用户和商家带来不可估量的损失。

解决方案:使用HTTPS保障安全

HTTPS(Hypertext Transfer Protocol Secure)是在HTTP的基础上增加了SSL/TLS协议,用于加密数据传输,保障数据在传输过程中的机密性、完整性和身份验证。通过HTTPS协议,黑客即使截获数据包,也无法解读其中的内容,极大地提升了通信的安全性。


第二章 为什么要用HTTPS而不是HTTP

1. 数据加密

HTTPS通过SSL/TLS加密机制保障了数据在客户端和服务器之间传输时的安全性。加密算法会对传输的数据进行加密,使得第三方无法轻易读取或篡改数据。

2. 身份验证

通过HTTPS协议,服务器需要出示证书来证明其身份,避免用户误连接到虚假或恶意服务器。

3. 数据完整性保障

HTTPS确保了数据在传输过程中不会被篡改,即使数据包在传输中被拦截,拦截者也无法修改包内内容而不被发现。


第三章 HTTPS证书的选择

HTTPS依赖于SSL/TLS证书来保障通信安全。不同的证书类型适用于不同的场景,选择合适的证书是确保系统安全的关键。

免费证书 vs. 商业证书

免费证书:

免费证书(如Let’s Encrypt)广泛用于个人站点和中小型企业。这些证书可以自动更新,适合预算有限的项目。然而,免费证书通常提供的服务支持较为有限,且一些高级功能可能无法使用。

商业证书:

商业证书由专门的证书颁发机构(CA)提供,适用于对安全性要求较高的大型企业。商业证书提供更高的信任级别以及更长的有效期,部分还提供保险服务,增加了风险保障。

示例:

在电商平台中,由于涉及到大量用户的支付信息,使用商业证书会更加稳妥。这类证书通常由知名CA颁发,增强了用户对平台的信任感。


第四章 证书颁发机构(CA)的重要性

证书颁发机构(CA)负责验证服务器身份,并颁发数字证书。CA是HTTPS认证体系中的核心角色,用户通过验证服务器的数字证书,确认其真实身份。选择可信的CA至关重要,因为如果用户不信任证书提供商,他们也很难信任你的平台。

常见的CA包括:

  • Let’s Encrypt(免费)
  • DigiCert
  • GlobalSign
  • Comodo

在选择CA时,需考虑其全球信任度、证书支持范围及附加服务。


第五章 在Spring Boot 中配置 HTTPS 及调用 HTTPS 接口请求的示例与配置

在现代化电商交易系统中,安全性至关重要。除了保障我们自己的应用通过 HTTPS 安全传输外,调用外部服务(如支付接口、物流接口)时,也需要确保 HTTPS 请求的安全性。本文将详细介绍如何在 Spring Boot 中配置 HTTPS 以及通过 RestTemplateHttpClient 调用 HTTPS 接口的示例,并对相关配置参数进行说明。

1. 配置 HTTPS 的步骤

首先我们来详细讲解如何在 Spring Boot 中配置 HTTPS,确保应用程序能够通过 HTTPS 进行安全通信。

使用自签名证书配置 HTTPS

自签名证书通常用于开发和测试环境。生产环境中通常不建议使用,因为它不能为用户提供有效的身份验证。

  1. 生成自签名证书

    使用 keytool 生成自签名证书:

    keytool -genkeypair -alias mycert -keyalg RSA -keysize 2048 -validity 365 -keystore keystore.jks
    

    在该命令中:

    • -alias mycert 是证书的别名。
    • -keyalg RSA 是使用的加密算法。
    • -validity 365 表示证书的有效期为365天。
    • -keystore keystore.jks 是生成的证书文件。
  2. 将证书配置到 Spring Boot

    在 Spring Boot 应用的 application.properties 文件中进行配置:

    server.port=8443
    server.ssl.key-store=classpath:keystore.jks
    server.ssl.key-store-password=your_password
    server.ssl.key-password=your_password
    server.ssl.key-store-type=JKS
    

    主要配置参数说明:

    • server.port=8443:指定应用监听的 HTTPS 端口。
    • server.ssl.key-store:指定证书库的路径。
    • server.ssl.key-store-password:证书库的密码。
    • server.ssl.key-password:密钥密码,用于解锁密钥。
    • server.ssl.key-store-type=JKS:证书库的格式,这里使用 Java 密钥库(JKS)。
  3. 启动并测试 HTTPS 连接

    启动 Spring Boot 应用后,通过 https://localhost:8443 访问,验证 HTTPS 是否成功启用。

使用 Let’s Encrypt 免费证书配置 HTTPS

Let’s Encrypt 提供免费的 SSL/TLS 证书,适用于生产环境。以下是配置 Let’s Encrypt 证书的步骤:

  1. 生成 Let’s Encrypt 证书

    使用 certbot 生成 Let’s Encrypt 证书:

    sudo apt install certbot
    sudo certbot certonly --standalone -d yourdomain.com
    

    证书生成后存储在 /etc/letsencrypt/live/yourdomain.com/ 目录下。

  2. 配置 Let’s Encrypt 证书到 Spring Boot

    application.properties 文件中添加以下配置:

    server.port=443
    server.ssl.key-store=/etc/letsencrypt/live/yourdomain.com/fullchain.pem
    server.ssl.key-store-password=your_password
    server.ssl.key-password=your_password
    server.ssl.key-store-type=PKCS12
    

    参数说明:

    • server.ssl.key-store:Let’s Encrypt 证书的路径。
    • server.ssl.key-store-type=PKCS12:PKCS12 是一种常见的加密文件格式,适用于现代 SSL/TLS 证书。
  3. 自动续期

    Let’s Encrypt 证书有效期为 90 天,可以通过 cron 任务设置自动续期:

    sudo crontab -e
    

    添加以下行,每天自动检查并更新证书:

    0 0 * * * /usr/bin/certbot renew --quiet
    

2. 调用 HTTPS 接口的请求配置及示例

在实际的电商系统开发中,除了配置 HTTPS 保障自身安全外,还经常需要调用外部 HTTPS 服务(如支付网关、物流接口等)。这里我们通过 RestTemplateHttpClient 来演示如何配置和调用 HTTPS 接口。

使用 RestTemplate 调用 HTTPS 接口

RestTemplate 是 Spring 提供的轻量级 HTTP 客户端,用于发送 HTTP/HTTPS 请求。默认情况下,RestTemplate 支持 HTTPS 请求,但如果使用的是自签名证书,需要额外的配置。

配置 RestTemplate

import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;@Configuration
public class RestTemplateConfig {@Beanpublic RestTemplate restTemplate(RestTemplateBuilder builder) {return builder.build();  // 默认支持HTTPS}
}

示例:调用第三方 HTTPS 支付接口

import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;@Service
public class PaymentService {private final RestTemplate restTemplate;public PaymentService(RestTemplate restTemplate) {this.restTemplate = restTemplate;}public String processPayment() {String url = "https://api.payment.com/process";HttpHeaders headers = new HttpHeaders();headers.set("Authorization", "Bearer your_token");headers.set("Content-Type", "application/json");String body = "{\"amount\": 100, \"currency\": \"USD\"}";HttpEntity<String> request = new HttpEntity<>(body, headers);ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.POST, request, String.class);return response.getBody();}
}

重要配置参数说明:

  • restTemplate.exchange():用于发送 HTTP 请求,可以自定义请求方法(如 GET、POST 等)。
  • HttpHeaders:用于设置请求头,包含认证信息、内容类型等。
  • HttpEntity:用于封装请求体和头信息。

处理自签名证书

如果调用的外部服务使用自签名证书,则需要配置 TrustStrategy 来信任所有证书:

import org.apache.http.ssl.SSLContextBuilder;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
import javax.net.ssl.SSLContext;
import java.security.NoSuchAlgorithmException;
import java.security.KeyManagementException;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class RestTemplateConfig {@Beanpublic RestTemplate restTemplate() throws NoSuchAlgorithmException, KeyManagementException {SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial((chain, authType) -> true)  // Trust all certificates.build();CloseableHttpClient httpClient = HttpClients.custom().setSSLContext(sslContext).build();HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient);return new RestTemplate(factory);}
}

该配置将允许 RestTemplate 信任自签名证书的 HTTPS 请求。

使用 HttpClient 调用 HTTPS 接口

HttpClient 是一个功能强大的 HTTP 客户端,适用于需要复杂配置的 HTTP/HTTPS 请求。

示例:使用 HttpClient 调用 HTTPS 接口

import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;public class HttpsRequestExample {public static String sendPostRequest(String url, String jsonPayload) throws Exception {try (CloseableHttpClient httpClient = HttpClients.createDefault()) {HttpPost httpPost = new HttpPost(url);httpPost.setHeader("Content-Type", "application/json");httpPost.setEntity(new StringEntity(jsonPayload));HttpResponse response = httpClient.execute(httpPost);return EntityUtils.toString(response.getEntity());}}public static void main(String[] args) throws Exception {String url = "https://api.payment.com/process";String jsonPayload = "{\"amount\": 100, \"currency\": \"USD\"}";String response = sendPostRequest(url, jsonPayload);System.out.println("Response: " + response);}
}

重要配置参数说明:

  • HttpPost:指定 HTTP 请求方法为 POST。
  • setHeader():用于设置请求头,比如内容类型、认证信息等。
  • StringEntity:将 JSON 格式的请求体封装成 HTTP 实体对象。
  • HttpResponse:用于接收服务器的响应。

处理自签名证书

同样,如果外部 HTTPS 服务使用自签名证书,需要信任所有证书:

import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContextBuilder;import javax.net.ssl.SSLContext;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;public class HttpClientConfig {public CloseableHttpClient createHttpClientWithTrustAllCerts() throws NoSuchAlgorithmException, KeyManagementException {SSLContext sslContext = SSLContextBuilder.create().loadTrustMaterial((chain, authType) -> true)  // Trust all certificates.build();return HttpClients.custom().setSSLContext(sslContext).build();}
}

第六章 在生产环境中确保HTTPS的注意事项

在生产环境中,仅仅配置HTTPS是不够的,还需要确保安全配置的正确性。以下是一些最佳实践:

TLS的配置与最佳实践

  1. 支持的TLS版本配置: 生产环境中,建议只启用TLS 1.2及更高版本。TLS 1.0和1.1已被认为不安全,应禁用。

    server.ssl.enabled-protocols=TLSv1.2,TLSv1.3
    
  2. 禁用不安全的加密算法: 一些过时的加密算法已经被证明存在漏洞。应确保配置中禁用了这些不安全的算法。

    server.ssl.ciphers=TLS_AES_128_GCM_SHA256,TLS_AES_256_GCM_SHA384
    
  3. 强制HSTS(HTTP Strict Transport Security): HSTS是一种安全机制,告知浏览器在未来的请求中仅通过HTTPS访问站点,从而防止降级攻击。

    在Spring Boot中可以通过添加SecurityHeaders配置实现:

    @Override
    protected void configure(HttpSecurity http) throws Exception {http.headers().httpStrictTransportSecurity().maxAgeInSeconds(31536000) // 一年.includeSubDomains(true); // 应用到子域名
    }
    

第七章 HTTPS对性能的影响,HTTPS性能优化

虽然HTTPS提供了更高的安全性,但也会引入一些额外的计算开销,如加解密的处理。幸运的是,现代的硬件和软件优化已经能够显著减少HTTPS的性能影响。

优化措施

  1. 启用HTTP/2: HTTP/2可以显著提升HTTPS的性能,特别是减少请求响应的延迟时间。
  2. 使用更快的加密算法: 选择适合的加密算法,如AES 128比AES 256更高效,同时也能提供足够的安全性。
  3. 使用会话缓存: 通过启用SSL会话缓存,减少重新建立SSL连接的时间。

第八章 如何识别证书是否过期(Linux下)

在生产环境中,定期检查证书是否过期是至关重要的,尤其是当证书过期时,用户可能会无法访问系统。

检查证书有效期:

使用OpenSSL工具可以快速检查证书的有效期:

openssl x509 -enddate -noout -in /path/to/your/certificate.pem

输出示例:

notAfter=Sep  1 12:00:00 2023 GMT

自动检测并发出警报:

可以使用定时任务(cron)结合脚本,在证书快到期时发出警报。

#!/bin/bash
EXPIRATION_DATE=$(openssl x509 -enddate -noout -in /path/to/your/certificate.pem | cut -d= -f2)
EXPIRATION_TIMESTAMP=$(date -d "$EXPIRATION_DATE" +%s)
CURRENT_TIMESTAMP=$(date +%s)if (( $EXPIRATION_TIMESTAMP - $CURRENT_TIMESTAMP < 2592000 )); thenecho "Warning: Certificate is about to expire!" | mail -s "SSL Certificate Expiry Warning" admin@yourdomain.com
fi

相关文章:

Web安全之HTTPS调用详解和证书说明案例示范

随着互联网的高速发展&#xff0c;网络安全成为了一个不可忽视的话题&#xff0c;特别是在涉及用户敏感信息的业务系统中。在此背景下&#xff0c;使用HTTPS取代HTTP成为了大势所趋。本文将以电商交易系统为例&#xff0c;详细介绍HTTPS的重要性&#xff0c;并探讨如何通过HTTP…...

man命令学习记录

使用man来查看命令的用法 man ls 想了解Linux命令的用法假设你想查ls命令的更多信息&#xff0c;输入man ls&#xff0c;就会打开man page&#xff08;man是manual的缩写&#xff0c;因此man page就是“手册页面”&#xff09;&#xff0c;显示关于ls命令各个方面的信息。 通常…...

Linux三剑客-grep

grep介绍 全拼&#xff1a; Global search REgular expression and Print out line. 作用&#xff1a; 文本搜索工具&#xff0c;根据用户指定的“模式&#xff08;过滤条件&#xff09;”对目标文本逐行进行匹配检查&#xff0c;打印匹配到的行。 模式&#xff1a; 有正则表达…...

备忘录模式memento

学习笔记&#xff0c;原文链接 https://refactoringguru.cn/design-patterns/memento 允许生成对象状态的快照并在以后将其还原。备忘录不会影响它所处理的对象的内部结构&#xff0c; 也不会影响快照中保存的数据。...

5-【JavaWeb】JUnit 单元测试及JUL 日志系统

1. 使用 JUnit 进行单元测试 JUnit 是 Java 中非常流行的单元测试框架&#xff0c;MyBatis 与 JUnit 可以很好地结合&#xff0c;来测试持久层代码的正确性。 1.1 添加 JUnit 依赖 在使用 JUnit 之前&#xff0c;需要在 pom.xml 中引入 JUnit 依赖。 <dependency><…...

多人开发小程序设置体验版的痛点

抛出痛点 在分配任务时,我们将需求分为三个分支任务,分别由前端A、B、C负责: 前端A: HCC-111-实现登录功能前端B: HCC-112-实现用户注册前端C: HCC-113-实现用户删除 相应地,我们创建三个功能分支: feature_HCC-111-实现登录功能feature_HCC-112-实现用户注册feature_HCC-1…...

【Kubernetes】常见面试题汇总(七)

目录 20.简述 Kubernetes 创建一个 Pod 的主要流程&#xff1f; 21.简述 Kubernetes 中 Pod 的重启策略&#xff1f; 20.简述 Kubernetes 创建一个 Pod 的主要流程&#xff1f; Kubernetes 中创建一个 Pod 涉及多个组件之间联动&#xff0c;主要流程如下&#xff1a; &#…...

EmguCV学习笔记 C# 11.1 DnnInvoke类

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…...

论文解读 | ACL2024 Outstanding Paper:因果指导的主动学习方法:助力大语言模型自动识别并去除偏见...

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 点击阅读原文观看作者直播讲解回放&#xff01; 作者简介 孙洲浩&#xff0c;哈尔滨工业大学SCIR实验室博士生 概述 尽管大语言模型&#xff08;LLMs&#xff09;展现出了非常强大的能力&#xff0c;但它们仍然…...

xLSTM模型学习笔记

笔记来源&#xff1a;bilibili LSTM 回顾 原始的 LSTM 是为了解决 RNN 时序反向传播中梯度消失和爆炸问题而提出的。 其所谓的门控机制&#xff0c;其实就是一种时序上的注意力机制&#xff0c;相当于把不同时间进行"掺和"&#xff0c;是对时序信息的一种选择性控制…...

woocommerce 调用当前product_tag 为标题

要在 WooCommerce 中调用当前产品标签&#xff08;product tag&#xff09;作为标题&#xff0c;你可以使用以下代码。这段代码将获取当前产品标签的名称&#xff0c;并将其显示为标题。 <?php // 获取当前产品标签名称 $current_tag single_term_title(, false);// 检查是…...

音视频开发:基于sdl的pcm播放器

源码 /*** SDL2播放PCM*** 本程序使用SDL2播放PCM音频采样数据。SDL实际上是对底层绘图* API&#xff08;Direct3D&#xff0c;OpenGL&#xff09;的封装&#xff0c;使用起来明显简单于直接调用底层* API。* 测试的PCM数据采用采样率44.1k, 采用精度S16SYS, 通道数2** 函数调…...

[产品管理-6]:NPDP新产品开发 - 4 - 战略 - 创新支持战略,支持组织的总体创新战略(平台战略、技术战略、营销战略、知识产权战略、能力建设战略)

目录 一、创新支持战略概述 二、平台战略&#xff1a;大平台小产品战略 2.1 概述 1、平台战略的定义 2、平台战略的特点 3、平台战略的应用领域 4、平台战略的成功案例 5、平台战略的发展趋势 2.2 大平台小产品战略 1&#xff09;大平台的建设 2&#xff09;、小产品…...

Cursor:程序员的AI助手,开启智能编程新时代

在当今快节奏的软件开发世界&#xff0c;效率和准确性是成功的关键。而 Cursor&#xff0c;作为一款创新的人工智能编程工具&#xff0c;正在极大地改变着编程的面貌&#xff0c;为开发者带来前所未有的便捷与惊喜。 智能代码生成 Cursor 利用强大的人工智能模型&#xff0c;…...

OpenAI 刚刚发布了新的Sora视频——实现的真人效果令人惊叹

在 YouTube 上发布了两段由专业创作者制作的新的“Sora Showcase”视频。这些视频展示了尚未发布的 Sora AI 视频模型的惊人潜力。 Sora 于今年二月首次宣布&#xff0c;但由于生成时间、成本和错误信息的潜在风险&#xff0c;光年AI 仅向一小部分创作者 开放了该模型。 自So…...

计算机视觉学习路线

计算机视觉是一门让机器理解和解释视觉世界的科学&#xff0c;它涉及到图像识别、图像处理、模式识别等多个方向。学习计算机视觉的路线通常包括以下几个阶段&#xff1a; 数学和编程基础&#xff1a;需要掌握微积分、线性代数、概率论等数学知识&#xff0c;以及Python或C等编…...

JNPF快速开发平台在企业中的应用

随着数字化转型的浪潮席卷全球&#xff0c;企业纷纷寻求高效、灵活的解决方案以适应快速变化的市场需求。在这一背景下&#xff0c;低代码开发平台应运而生&#xff0c;成为数字经济的“软基建”。今天&#xff0c;我们就来探讨JNPF快速开发平台如何在企业中发挥作用&#xff0…...

Mysql高级篇(中)—— 索引优化

Mysql高级篇&#xff08;中&#xff09;—— 索引优化 一、索引分析案例案例 1&#xff1a;单表查询案例 2&#xff1a;两表连接查询案例 3&#xff1a;三表连接查询 二、避免索引失效常见索引失效场景简述场景 1场景 2场景 3场景 4场景 5场景 6 三、索引优化文字版示例版 一、…...

electron: 将网址打包成exe桌面应用

项目场景&#xff1a; 在项目开发的过程中&#xff0c;需要将应用搭建在不同的硬件上。如需要在一个触屏显示器上展示企业相关的应用。 如果专门去开发一个这样的应用&#xff0c;不划算&#xff1b;这时候考虑将网址打包成exe应用&#xff0c;并安装触屏器上&#xff0c;就可…...

【Python篇】PyQt5 超详细教程——由入门到精通(中篇二)

文章目录 PyQt5超详细教程前言第7部分&#xff1a;生成图表与数据可视化7.1 matplotlib 与 PyQt5 的结合7.2 在 PyQt5 中嵌入 matplotlib 图表示例 1&#xff1a;嵌入简单的 matplotlib 图表代码详解&#xff1a; 7.3 动态生成图表示例 2&#xff1a;动态更新图表代码详解&…...

2024/9/10 小型PLC典型应用1:含步进电机+变频器+触摸屏

主要是讲脉冲控制步进&#xff0c;因为etherCat是标准化的&#xff0c;直接通过轴控指令即可控制&#xff1b;canopen也涉及轴控指令&#xff0c;但配置稍微有点不一样。 控制本体端口的步进&#xff0c;通过发脉冲或者脉冲定位信号。 但这个4PM只有单独的轴控指令&#xff0c;…...

RGB与CMYK互转

先定义一个CMYK数据结构&#xff1a; typedef struct struCMYK {int m_nC;int m_nM;int m_nY;int m_nK; }CMYK;RGB转CMYK void CvtRGB2CMYK(COLORREF& clr, CMYK& cmyk) {double dR GetBValue(clr) / 255.0;double dG GetGValue(clr) / 255.0;double dB GetRValue…...

滴~“TOP期刊体验卡”已到期!公认水刊的尽头,还得是你MDPI

【SciencePub学术】本期&#xff0c;给大家介绍的是1本MDPI旗下的计算机类SCI——《Remote Sensing》。 优点VS缺点 • 期刊分区一直维持在较高水平 • 审稿速度极快&#xff0c;1-2个月录用见刊 • 年刊文量大&#xff0c;收稿多 • 期刊自引率较高 • 期刊系统初筛较难 • …...

ASUS华硕ROG幻16 Air 2024款锐龙AI版GA605WI,GA605WV工厂模式原厂Win11系统,含MyASUS WinRE恢复重置还原功能

适用型号&#xff1a;【GA605WI、GA605WV】&#xff0c;原装出厂Windows11系统工厂包下载 链接&#xff1a;https://pan.baidu.com/s/1IVolLwB7fddGKZY0IxOqaA?pwd62e2 提取码&#xff1a;62e2 华硕原装系统工厂安装包&#xff0c;带有MyASUS WinRE RECOVERY恢复功能、自带…...

想入行在线教育?你必须知道的十件事

在最近几年受新冠疫情和异常天气的影响&#xff0c;越来越多的教育活动被迫转移到线上。然而&#xff0c;在线课程的短板也很明显&#xff0c;大部分在线教育工作者难以有效地引导学生集中注意力&#xff0c;并且无法像线下授课一样进行同步考试。 那么&#xff0c;有什么办法…...

EasyExcel相关整理

一、实体类常用注解 1、字段注解ExcelProperty&#xff0c;一般常用value标明表头&#xff0c;index标明列 2、实体类注解&#xff08;导出样式设置&#xff09; 3、导出特殊类型转换 二、导出 1、导出多个sheet 2、导出数据量大导致内存溢出 三、导入 待更新...

2024年【汽车驾驶员(技师)】考试题及汽车驾驶员(技师)找解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 汽车驾驶员&#xff08;技师&#xff09;考试题根据新汽车驾驶员&#xff08;技师&#xff09;考试大纲要求&#xff0c;安全生产模拟考试一点通将汽车驾驶员&#xff08;技师&#xff09;模拟考试试题进行汇编&#…...

[C#学习笔记]接口的特性与用法

视频地址&#xff1a;一期视频看透C#接口的全部特性及用法_哔哩哔哩_bilibili 强烈推荐学习C#和WPF的朋友关注此UP&#xff0c;知识点巨多&#xff0c;讲解透彻&#xff01; 一、总览 public interface IOverall {/// <summary>/// 最普通的方法/// </summary>v…...

java发送邮件报错,Could not connect to SMTP host: smtp.exmail.qq.com, port: 465

发现问题 我使用的 docker 运行的 jdk 环境&#xff0c;服务调用发送邮件报错 javax.mail.MessagingException: Could not connect to SMTP host: smtp.exmail.qq.com, port: 465;nested exception is:javax.net.ssl.SSLHandshakeException: No appropriate protocol (protoc…...

开放式耳机有哪些好处?性价比排行前十的四款蓝牙耳机推荐

开放式耳机有以下好处&#xff1a; 佩戴舒适&#xff1a;开放式耳机不入耳&#xff0c;不堵塞耳道&#xff0c;长时间佩戴耳朵不易感到闷热和疼痛&#xff0c;相比传统入耳式耳机&#xff0c;能减少对耳道的压迫感和摩擦&#xff0c;让耳朵更舒适。 更健康卫生&#xff1a;不入…...