微信公众号 H5授权登录实现(最详细)

news2024/11/25 14:25:59

一、微信公众号

(一)基础信息

微信授权类型

自己的网站、APP等第三方,要实现接入微信授权登录,有多种方式:微信公众号(网页)、微信小程序、微信开放平台(APP)等等。

【项目代码】

GitHub - liyinchigithub/springboot-learn: springboot 学习项目

微信公众号(网页)

  • 公众号配置JS安全域名、code回调域名
  • 微信授权登录,获取access_token、openid等用户信息
  • jssdk认证(签名)
  • 调用jssdk相关方法调用
  • 花生壳域名内网穿透
  • 微信开放平台地址汇总
1.申请公众号
(1)第一步 认证微信公众帐号

首先,得拥有一个通过认证了的微信公众号或者开发者帐号认证费一年300块钱; 

(2)第二步 添加安全域名

在公众帐号平台后台添加 app 运行的域名地址,为某个域名添加白名单功能,让微信知道这个ip是你的机子。

例如:微信公众号是”瓜瓜“,添加了 guagua.com 为安全域名,那么我在 guagua.com 上的网页可以使用瓜瓜下公众帐号的数字签名了; 

(3)第三步 生成数字签名

在微信公众平台后台上面能找到一个 appid 及 secret字符串

通过这两个参数,请求微信提供的两个公开API地址,生成对应的access_token后再生成ticket再通过规则加密成数字签名,数字签名必须在服务端生成,这里我以Springboot来实现

2.微信公众号平台配置

微信公众平台微信公众平台,给个人、企业和组织提供业务服务与用户管理能力的全新服务平台。icon-default.png?t=N7T8https://mp.weixin.qq.com/

(1)添加开发者的微信号到公众号人员设置中

0

绑定运营者微信号

0

(2)添加开发者微信账号到web

菜单路径:首页》开发》开发者工具》Web开发工具 》绑定开发者微信号

0

0

绑定开发者微信号

0

(3)查看微信公众号appID和appScrent

菜单路径:首页》开发》基本配置 》公众号开发信息

0

(4)将AppID和AppSecret配置到项目中

3.微信公众平台接口调试工具(检测准备工作情况)

如果微信公众号认证还没通过,可以先使用官方提供的测试号来进行调试。

方便调试,在线工具:微信公众平台接口调试工具

0

注意:这边使用的appid和secret是测试号的环境(沙盒)。

微信公众平台

遇到问题:如果接口报错返回提示无效ip

解决办法:需要将本地电脑ip地址,添加到公众号ip白名单中。

菜单路径:设置与开发 > 基本配置 > IP白名单 > 查看/添加

重新请求,成功获取accessToken

【使用微信JSSDK示例】

(1)获取关注者列表接口
①  基础支持-获取access_token接口

0

备注:旧版本是formdata格式(2020年),新版本是json格式(2024年6月16日)

{ "grant_type": "client_credential", "appid": "xxxxx", "secret": "xxxxxx" }
② 获取关注列表接口

传入上一步access_token参数值,作为鉴权参数。

所有关注此公众号的微信号openid都在数组里

(2)获取用户基本信息接口 /user/info

①填入上一步获取到的access_token

②填入上上步获取到的openid(可通过获取关注者列表接口获取到)

0

最新版没有用户昵称(2024年6月16日)

遇到问题:token过期

{ "errcode": 42001, "errmsg": "access_token expired rid: 666fa0b9-04633663-35fb85fa" }“

解决办法:重新调用,基础支持获取access_token获取新的token

网页授权 | 微信开放文档微信开发者平台文档icon-default.png?t=N7T8https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html

前端通过用户触发请求公众号授权接口

  • 第一种形式:location.href
 <a href="https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${redirect_uri}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect"></a>

注意:这种方式会暴露appid在前端页面

  • 第二种形式:按钮事件(推荐)
<button @click="toWechatLogin">

toWechatLogin() {
      /**
       * @description 前端请求微信开放平台(微信登录授权接口,回调code)
       * @param appid 微信公众号appid
       * @param redirect_url 微信授权流程,获取code回调地址
       * */
      // TODO 用户触发发起授权链接
      var appid = 'xxxxx';// 微信公众号APPID
      var redirect_uri = encodeURIComponent('http://xxxxx.zicp.vip/code');// 网页授权code回调地址
      window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${redirect_uri}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect`
      }

微信开发者工具,访问本地开发环境地址(模拟微信客户端内置浏览器打开业务域名,一般是登录页面)

0

0

返回数据

注意:请求`https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${redirect_uri}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect`,不能使用客户端自带http请求库(如:axios、request)来发起请求这个地址,而是只能使用location.href方式

4.方向代理配置

第一种:本地配置Nginx代理转发(推荐)

Nginx文件

// 修改nginx.conf文件 
server {
	listen 80;#
	监听的端口号
	server_name wxh5.xxx.fssh.com;#
	本地访问的域名(注意: host文件也要配置)
	location / {# 
		前端项目接口, 反向代理路径
		proxy_pass http: //127.0.0.1:9020/;
			#代理的域名加本地项目启用的端口号 - > nginx服务会代理本地起的服务从而可以在wx开发者工具上调试, 因为你的目的就是为了在工具调试本地的微信授权登录的流程
	}
	location / sns {# 
		微信公众号平台接口, 反向代理路径#
		return 666;
		proxy_pass https: //api.weixin.qq.com;   
	}
	location / code {# 
		code回调接口地址
		proxy_pass http: //127.0.0.1:4343; 
	}
	location / api {# 
		后端项目接口, 反向代理路径
		proxy_pass http: //127.0.0.1:4343;  
	}
}

host文件

127.0.0.1 wxh5.xxx.fssh.com

教程:window安装配置nginx(window Nginx安装配置)

原本我使用花生壳做内网穿透,但百度到一篇文件,不使用花生壳,可以直接修改hosts文件+nginx配置,就可以用本地自定义的域名来通过微信开发者工具访问到前端项目、前端项目访问后端接口,具体如下。

cd /usr/local/etc/nginx open /usr/local/etc/nginx

我的本地前端项目地址、端口

127.0.0.1:9020

0

我的本地后端项目地址、端口

127.0.0.1:4343

重启nginx

sudo nginx -s reload

微信公众号js接口安全域名配置(域名与nginx配置自定义本地域名一致)

微信公众号测试号,回调域名配置(域名与nginx配置自定义本地域名一致)

0

微信开发者工具,访问本地前端项目,url输入自定义本地域名

开发者工具url输入,自定义本地域名+/api/

示例:后端 接口/code

对应nginx中的/code如下:

nginx.conf文件

0

 

总结,本地nginx文件配置流程:

  • (1)自定义本地访问的域名
  • (2)前端项目本地IP和端口
  • (3)后端项目本地IP和端口
  • (4)微信公众号平台接口域名
  • (5)JSSDK域名

备注:如果使用nodejs anywhere库启动打包后静态文件dist文件夹,那么IP也是127.0.0.1+anywhere端口号修改配置到nginx

5.微信JSSDK引入与配置

前端什么时候需要引入微信JS-SDK?

(1)如果你的目的是让用户点击按钮后通过重定向到微信授权页面进行登录,那么不需要引入微信JS-SDK。

这种情况下,用户的登录流程是完全由后端处理的,前端只负责触发重定向。

<!-- src/main/resources/static/wechatLogin.html --> <!DOCTYPE html> 
<html lang="en"> 
<head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
<title>Wechat Login</title> 
</head>
 <body> 
<h1>Wechat Login Test</h1> 
<button onclick="location.href='/login/wechat'">Login with Wechat</button> 
<!-- <button onclick=window.location.href=`https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxxxx&redirect_uri=https://xxxx.vicp.fun/login/wechat/callback&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect`>Login with Wechat
</button>--> 
</body> 
</html> 
<!-- wechatLogin.html 页面本身不需要包含请求参数 code 和 state。 这个页面只是提供一个按钮,用户点击后会被重定向到微信的授权页面。 在这个过程中,code 和 state 参数是由微信在用户授权后自动附加到回调URL上的。 -->
(2)当你需要用到用户地理位置、微信支付、分享等。

如果你需要在你的H5页面中使用这些功能,或者需要通过微信网页直接获取用户信息而不是重定向,那么你应该引入和配置JS-SDK。

引入和配置步骤

(1)引入JS-SDK:

在你的HTML页面中,添加以下脚本标签来引入微信JS-SDK。

  <script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>

(2)配置JS-SDK:

你需要后端提供JS-SDK的配置信息,包括appId, timestamp, nonceStr, signature等。这些信息需要通过调用微信的接口获得。

配置示例如下:

   wx.config({        
    debug: true, // 开启调试模式
        appId: '你的AppID', // 必填,公众号的唯一标识 
       timestamp: '生成签名的时间戳', // 必填,生成签名的时间戳
        nonceStr: '生成签名的随机串', // 必填,生成签名的随机串 
       signature: '签名', // 必填,签名 
       jsApiList: ['checkJsApi', 'onMenuShareTimeline', 'onMenuShareAppMessage'] // 必填,需要使用的JS接口列表    });

(3)发起微信登录请求:

如果你决定使用JS-SDK来处理登录,可以使用wx.login方法来发起微信登录请求。

  wx.login({        
success: function(res) {      
      if (res.code) {            
    // 使用返回的code去后端换取access_token等信息   
         } else {          
      console.log('登录失败!' + res.errMsg);        
    }      
  }  
  });

在wechatLogin.html实现引入JSSDK并获取用户地理位置、分享。

(1)你需要从后端获取必要的配置参数(appId, timestamp, nonceStr, signature),这通常涉及到服务器端的一些处理,以确保安全性。这里假设你已经有了一个API可以调用来获取这些数据。

在HTML中添加以下脚本来配置SDK

(2)使用JS-SDK获取地理位置

在配置成功后,你可以调用wx.getLocation方法来获取用户的地理位置:

<script>
wx.ready(function() {
    // 获取地理位置
    wx.getLocation({
        type: 'wgs84',
        success: function (res) {
            var latitude = res.latitude; // 纬度,浮点数,范围为90 ~ -90
            var longitude = res.longitude; // 经度,浮点数,范围为180 ~ -180。
            var speed = res.speed; // 速度,以米/每秒计
            var accuracy = res.accuracy; // 位置精度
            alert('Latitude: ' + latitude + '\nLongitude: ' + longitude);
        }
    });
    // 配置分享给朋友的信息
    wx.updateAppMessageShareData({ 
        title: '分享标题', // 分享标题
        desc: '分享描述', // 分享描述
        link: 'https://yourwebsite.com', // 分享链接
        imgUrl: 'https://yourwebsite.com/image.jpg', // 分享图标
        success: function () {
          // 设置成功
          alert('已分享');
        }
    });
    // 配置分享到朋友圈的信息
    wx.updateTimelineShareData({ 
        title: '分享标题', // 分享标题
        link: 'https://yourwebsite.com', // 分享链接
        imgUrl: 'https://yourwebsite.com/image.jpg', // 分享图标
        success: function () {
          // 设置成功
          alert('已分享到朋友圈');
        }
    });
});
</script>

(3)处理错误

添加错误处理来响应配置失败的情况:

<script>
wx.error(function(res){
    // config信息验证失败会执行error函数,如签名过期导致验证失败
    alert("Error: " + res.errMsg);
});
</script>

总结

如果你的页面只是需要一个简单的微信登录按钮,并通过后端处理登录流程,那么不需要引入微信JS-SDK。

6.UnionID 微信开放平台

(1)如果需要在多公众号、移动应用之间做用户共通,则需前往微信开放平台,将这些公众号和应用绑定到一个开放平台账号下,绑定后,一个用户虽然对多个公众号和应用有多个不同的OpenID,但他对所有这些同一开放平台账号下的公众号和应用,只有一个UnionID,可以在用户管理-获取用户基本信息(UnionID机制)文档了解详情。

7.公众号消息会话

(1)群发消息:

公众号可以以一定频次(订阅号为每天1次,服务号为每月4次),向用户群发消息,包括文字消息、图文消息、图片、视频、语音等。

(2)被动回复消息:

在用户给公众号发消息后,微信服务器会将消息发到开发者预先在开发者中心设置的服务器地址(开发者需要进行消息真实性验证),公众号可以在5秒内做出回复,可以回复一个消息,也可以回复命令告诉微信服务器这条消息暂不回复。被动回复消息可以设置加密(在公众平台官网的开发者中心处设置,设置后,按照消息加解密文档来进行处理。其他3种消息的调用因为是API调用而不是对请求的返回,所以不需要加解密)。

(3)客服消息:

用户在公众号内发消息/触发特定行为后,公众号可以给用户发消息。

具体发送规则见公众号客服消息文档:客服账号管理 | 微信开放文档

(4)模板消息:

在需要对用户发送服务通知(如刷卡提醒、服务预约成功通知等)时,公众号可以用特定内容模板,主动向用户发送消息。

8.返回码

微信开放文档

遇到问题:微信开发者工具访问测试页面,点击授权微信登录按钮后,跳转提示”Scope 参数错误或没有 Scope 权限“

0

解决办法(排查方案):

  • 使用的是订阅号,订阅号没有权限使用网页授权,详细可参考接口权限:微信开放文档
  • 需要已认证的服务号
  • 网页授权回调域名填写错误
  • Scope参数顺序不对
  • 服务号不支持扫码登录,要网站应用才支持:关于微信快速登录功能的说明 | 微信开放文档
  • snsapi_userinfo的接口权限被封

https://mp.weixin.qq.com/advanced/advanced?action=table&token=1037385634&lang=zh_CN

接口权限 》网页服务》 网页权限》

0

设置网页授权域名

参考:网页授权 | 微信开放文档

参考:Scope 参数错误或没有 Scope 权限,错误码:10005 | 微信开放社区

第三步:依据接口文档实现业务逻辑

验证URL有效性成功后即接入生效,成为开发者。

你可以在公众平台网站中申请微信认证,认证成功后,将获得更多接口权限,满足更多业务需求。

成为开发者后,用户每次向公众号发送消息、或者产生自定义菜单、或产生微信支付订单等情况时,开发者填写的服务器配置URL将得到微信服务器推送过来的消息和事件,开发者可以依据自身业务逻辑进行响应,如回复消息。

公众号调用各接口时,一般会获得正确的结果,具体结果可见对应接口的说明。返回错误时,可根据返回码来查询错误原因。全局返回码说明

用户向公众号发送消息时,公众号方收到的消息发送者是一个OpenID,是使用用户微信号加密后的结果,每个用户对每个公众号有一个唯一的OpenID。

此外,由于开发者经常有需在多个平台(移动应用、网站、公众账号)之间共通用户账号,统一账号体系的需求,微信开放平台(open.weixin.qq.com)提供了UnionID机制。开发者可通过OpenID来获取用户基本信息,而如果开发者拥有多个应用(移动应用、网站应用和公众账号,公众账号只有在被绑定到微信开放平台账号下后,才会获取UnionID),可通过获取用户基本信息中的UnionID来区分用户的唯一性,因为只要是同一个微信开放平台账号下的移动应用、网站应用和公众账号,用户的UnionID是唯一的。换句话说,同一用户,对同一个微信开放平台账号下的不同应用,UnionID是相同的。详情请在微信开放平台的资源中心-移动应用开发-微信登录-授权关系接口调用指引-获取用户个人信息(UnionID机制)中查看。

另请注意,微信公众号接口必须以http://或https://开头,分别支持80端口和443端口。

9.AccessToken过期刷新

因为accessToken获取次数有限,我想在有效期7200秒内,使用同一个accessToken去请求获取用户信息,如果token过期了用刷新token去换一个新的accessToken,如果刷新token也过期了,那么再去重新请求新的accessToken,避免把当日accessToken获取次数用完。

如何实现?

为了有效管理微信 accessToken 的使用和刷新,你可以实现一个服务来处理 accessToken 的获取、存储、刷新以及过期逻辑。

这个服务将负责确保在请求微信 API 时使用有效的 accessToken,并在必要时自动刷新。

实现步骤:

(1)存储 accessToken 和 refreshToken:

你可以使用数据库或内存缓存(如 Redis)来存储 accessToken、refreshToken 及其过期时间。

(2)获取 accessToken 的服务方法:

  • 检查当前存储的 accessToken 是否有效。
  • 如果有效,直接返回它。
  • 如果无效,检查 refreshToken 是否还有效。
  • 如果 refreshToken 有效,使用它来获取新的 accessToken。
  • 如果 refreshToken 也失效,重新进行认证以获取新的 accessToken 和 refreshToken。

10.开发者注意事项

(1)微信公众平台开发

是指为微信公众号进行业务开发,为移动应用、PC端网站、公众号第三方平台(为各行各业公众号运营者提供服务)的开发,请前往微信开放平台接入。

(2)在申请到认证公众号之前,你可以先通过测试号申请系统,快速申请一个接口测试号,立即开始接口测试开发。

(3)在开发过程中,可以使用接口调试工具来在线调试某些接口。

(4)每个接口都有每日接口调用频次限制,可以在公众平台官网-开发者中心处查看具体频次。

(5)在开发出现问题时,可以通过接口调用的返回码,以及报警排查指引(在公众平台官网-开发者中心处可以设置接口报警),来发现和解决问题。

(6)公众平台以access_token为接口调用凭据,来调用接口,所有接口的调用需要先获取access_token,access_token在2小时内有效,过期需要重新获取,但1天内获取次数有限,开发者需自行存储,详见获取接口调用凭据(access_token)文档。10.

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

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

相关文章

什么是标准差和方差

标准差是用于衡量数字是如何分布的指标。用σ &#xff08;sigma&#xff09;表示。 标准差方差的平方根。 什么是方差 方差就是与均值的平方差的平均值。方差的计算过程&#xff1a; 计算平均值&#xff08;mean&#xff09;用μ /读mu/表示。用每一个数减去平均值&#xf…

Java基础的重点知识-04-封装

文章目录 面向对象思想封装 面向对象思想 在计算机程序设计过程中&#xff0c;参照现实中事物&#xff0c;将事物的属性特征、行为特征抽象出来&#xff0c;描述成计算机事件的设计思想。 面向对象思想的三大基本特征: 封装、继承、多态 1.类和对象 类是对象的抽象&#xff…

FreeCAD中类型机制研究

了解FreeCAD类型机制实现原理&#xff0c;为后续FreeCAD相关工作提供参考。 1.实现原理 FreeCAD系统提供一个最上层的基类BaseClass&#xff0c;该类主要处理类型相关工作&#xff0c;几乎所有的FreeCAD的类直接或间接继承于该类。该类只有唯一个属性Type&#xff0c;Type里面…

如何提升外链网站的收录率?

要提高外链网站的收录率&#xff0c;要明确的一点是&#xff0c;被收录的外链才能发挥最大的作用&#xff0c;因此&#xff0c;提升收录率是首要任务。一个有效的方法是使用GPC爬虫池&#xff0c;这样可以大幅度提高谷歌蜘蛛对众多外链网站页面的抓取频率 通过GPC爬虫池的引导…

OpenSSL命令手册

正文共&#xff1a;999 字 10 图&#xff0c;预估阅读时间&#xff1a;1 分钟 我们前面编译安装了OpenSSL命令工具&#xff08;CentOS编译安装OpenSSL 3.3.1&#xff09;&#xff0c;这是一个强大的安全套接字层密码库&#xff0c;可以用于实现各种加密和认证协议&#xff0c;如…

福州大学 2022~2023 学年第 1 学期考试 A 卷压轴题参考答案

题目&#xff1a; 定义一个抽象类Structure&#xff08;含有纯虚函数type函数&#xff0c;用以显示当前结构的类型&#xff1b; 含有show函数&#xff09;&#xff0c; 在此基础上派生出Building类, 用来存储一座楼房的层数、房间数以及它的总平方米数。 建立派生 类House&am…

QML 实现上浮后消失的提示框

基本效果&#xff1a;上浮逐渐显示&#xff0c;短暂停留后上浮逐渐消失 为了能同时显示多个提示框&#xff0c;一是需要动态创建每个弹框 Item&#xff0c;二是弹出位置问题&#xff0c;如果是底部为基准位置就把已经弹出的往上移动。 效果展示&#xff1a; 主要实现代码&…

路由模式--哈希模式下使用a标签跳转会有问题

路由模式分为 history 和 hash 两种模式&#xff0c;在 hash 模式下&#xff0c;使用 a 标签去跳转路由&#xff0c;可能会有问题。 比如&#xff1a; <a href"/home"><img src"/logo.png" class"logo" /></a> 在跳转路由时…

机器学习数学原理专题——线性分类模型:损失函数推导新视角——交叉熵

目录 二、从回归到线性分类模型&#xff1a;分类 3.分类模型损失函数推导——极大似然估计法 &#xff08;1&#xff09;二分类损失函数——极大似然估计 &#xff08;2&#xff09;多分类损失函数——极大似然估计 4.模型损失函数推导新视角——交叉熵 &#xff08;1&#x…

Java | Leetcode Java题解之第174题地下城游戏

题目&#xff1a; 题解&#xff1a; class Solution {public int calculateMinimumHP(int[][] dungeon) {int n dungeon.length, m dungeon[0].length;int[][] dp new int[n 1][m 1];for (int i 0; i < n; i) {Arrays.fill(dp[i], Integer.MAX_VALUE);}dp[n][m - 1] …

C语言入门系列:初识函数

文章目录 一&#xff0c;C语言函数与数学函数的区别1&#xff0c;回忆杀-初中数学2&#xff0c;C语言中的函数 二&#xff0c; 函数的声明1&#xff0c;函数头1.1&#xff0c;函数名称1.2&#xff0c;返回值类型1.3&#xff0c;参数列表 2&#xff0c;函数体2.1&#xff0c;函数…

idea右侧找不到Maven,在View-> Tool Windows下也找不到

正常情况Idea右侧没有Maven&#xff0c;只需去View -> Tool Windows 目录中找到Maven并点击Maven&#xff0c;Idea右侧就会出现 问题&#xff1a; idea右侧找不到Maven&#xff0c;在View -> Tool Windows 目录中也找不到Maven&#xff0c;下图 全局搜索ctrl N&#xff…

数据结构历年考研真题对应知识点(栈和队列的应用)

目录 3.3栈和队列的应用 3.3.2栈在表达式求值中的应用 【中缀表达式转后缀表达式的过程(2012、2014)】 【栈的深度分析(2009、2012)】 【用栈实现表达式求值的分析(2018)】 3.3.3栈在递归中的应用 【栈在函数调用中的作用和工作原理(2015、2017)】 3.3.5队列在计算机系…

苹果智能和人工智能最大化

苹果智能和人工智能最大化 除了苹果公司&#xff0c;还没有人真正使用过苹果的智能功能。它要到秋天才会分阶段发布&#xff0c;即使到那时&#xff0c;它也无法在80%或90%的iPhone安装基础上运行&#xff0c;因为它需要只有iPhone 15 Pro才能使用的设备上处理功能。没有什么能…

如何从magento1迁移到magento2

m2相较m1 变化可以说非常大&#xff0c;相当于从头到位都改写一遍&#xff0c;更现代化&#xff0c;更优雅。除了数据库表变化不是很大。 主要迁移的内容有&#xff1a; 1&#xff0c;主题 2&#xff0c;插件(自己开发的或者第三方插件) 3&#xff0c;数据库 主题 不能迁移到m…

如何在Windows 11和10上清除更新缓存?这里提供了几种方法

​Windows 11和Windows 10都可以非常轻松地清除Windows更新缓存。可以使用图形方法或命令行选项删除保存的更新文件。我们将向你展示你的可用选项。 为什么要清除Windows更新缓存 你可能希望清除Windows更新缓存的原因有很多。 你可能在查找或安装更新时遇到问题,清除缓存通…

如何恢复丢失的文件?免费为 Mac 恢复数据

丢失 Mac 上的重要文件是一件非常痛苦的事情。无论是重要的工作文件、重要文件还是心爱的照片&#xff0c;意外删除它们或出现系统错误都会非常令人沮丧。别担心&#xff1b;有办法&#xff1a;奇客数据恢复Mac版。这款免费的 Mac 文件恢复软件就像您文件的救星 - 当出现问题时…

每日一练:攻防世界:5-1 MulTzor

一、XorTool 基于 XOR&#xff08;异或&#xff09;运算实现。它可以帮助您快速地对文本、二进制文件进行加密解密操作。 认识XorTool工具&#xff1a; 让我们先去认识一下工具&#xff1a; xortool.py 是基于 python 的脚本&#xff0c;用于完成一些 xor 分析&#xff0c;…

持久化、主从 、分片、哨兵

目录 持久化 RDB&#xff08;存数据&#xff09; 使用场景 bgsave 使用方法 原理 AOF&#xff08;存命令&#xff09; 使用方法 原理 bgrewriteaof AOF和RDB 主从集群 搭建 数据同步原理(slave宕机&#xff09; 全量同步 增量同步 集群优化 总结 哨兵机制&…

JAVA学习过程中遇到的问题

前言 记录学习过程中遇见的各种问题。希望对你有帮助。 目录 前言 1、新建maven项目时&#xff0c;archetype项目骨架加载慢 2、maven的pop.xml添加依赖项无法检测到 3、java: 无效的目标发行版: 20 4、idea添加maven依赖太慢 5、CTRLCV复制粘贴太慢 6、Swagger写接口文…