苍穹外卖-day06

[!IMPORTANT]

  1. HttpClient 是什么?它的作用是什么?
  2. 在微信登录流程中,code 是什么?它的作用是什么?
  3. 微信登录的具体步骤有哪些?
  4. 在微信登录流程中,token 的作用是什么?
  5. 在微信登录中,如何生成 JWT 令牌?
  6. 在微信登录流程中,如何通过 HttpClient 向微信服务器发送请求?
  7. 微信登录的服务端如何处理新用户的注册?
  8. 在微信登录中,如何生成一个新的用户对象?
  9. 如何在后端进行 JWT 令牌的验证?
  10. 在微信登录的控制器中,如何返回登录结果?
  11. 如何在 WebMvcConfiguration 中配置拦截器?
  1. HttpClient 是什么?它的作用是什么?
    HttpClient 是 Apache Jakarta Commons 下的一个项目,提供高效的客户端编程工具包,支持 HTTP 协议的最新版本。它的作用是发送 HTTP 请求并接收响应数据。

  2. 在微信登录流程中,code 是什么?它的作用是什么?
    code 是微信小程序通过 wx.login() 获取的临时凭证,只有一次有效。它的作用是防止直接暴露用户身份,确保用户的隐私不被泄露。开发者服务器使用 code 来向微信服务器换取用户的唯一标识 openid 和会话密钥 session_key。

  3. 微信登录的具体步骤有哪些?

    1. 小程序获取临时门票(code):调用 wx.login() 获取 code。
    2. 小程序发送 code 到服务器:使用 wx.request() 把 code 发送到开发者服务器。
    3. 服务器向微信验证 code:开发者服务器通过 HttpClient 向微信接口服务发送请求,携带 appId、appSecret 和 code 进行验证。
    4. 微信返回 openid 和 session_key:微信返回用户的唯一标识 openid 和临时的 session_key。
    5. 服务器生成 token:开发者服务器根据 openid 创建自定义的 token,返回给小程序。
    6. 小程序存储 token:小程序将 token 存储到本地。
    7. 后续请求携带 token:小程序在后续请求中携带 token,服务器解析 token 并验证用户身份。

    请添加图片描述

用户点击微信登录按钮 → 小程序调用 wx.login() 方法 → 小程序生成临时凭证 code → 小程序通过 wx.request()code 发送到开发者服务器 → 开发者服务器接收到 code → 开发者服务器向微信服务器发送请求,携带 codeappIdappSecret → 微信服务器验证 code 是否有效 → 微信服务器返回 openidsession_key → 开发者服务器使用 openid 生成 JWT token → 开发者服务器将 token 返回给小程序 → 小程序接收到 token 并存储到本地存储中 → 用户进行后续操作时,小程序每次请求携带 token → 服务器解析 token 并验证其有效性 → 如果 token 有效,服务器返回相应的业务数据;如果无效,服务器要求重新登录 → 用户继续与系统互动,直到退出登录为止。

  1. 在微信登录流程中,token 的作用是什么?
    token 是开发者服务器生成的自定义通行证,用来代替 openid 传递,避免在请求中暴露用户的敏感信息。token 由开发者根据 openid 和其他信息签发,并用于验证用户身份。

  2. 在微信登录中,如何生成 JWT 令牌?
    生成 JWT 令牌的步骤如下:

    1. 创建一个 Map 集合,用来存放 JWT 的有效载荷(比如用户的 id)。
    2. 使用 JWT 工具类,传入密钥、有效时间和有效载荷,生成 JWT 令牌。
    3. 返回生成的 token 给小程序。
  3. 在微信登录流程中,如何通过 HttpClient 向微信服务器发送请求?
    通过 HttpClient 向微信服务器发送请求的步骤:

    1. 创建一个 Map 集合,存储 appidsecretcodegrant_type 等参数。
    2. 使用 HttpClient 工具类(如 HttpClientUtil.doGet()),将接口地址和 Map 集合传入,发起 GET 请求。
    3. 解析返回的 JSON 数据,提取出 openid。
  4. 微信登录的服务端如何处理新用户的注册?
    服务端通过 openid 判断用户是否为新用户。如果是新用户,则通过 openid 创建一个新的用户对象,并插入数据库。否则,直接返回已有的用户信息。

  5. 在微信登录中,如何生成一个新的用户对象?
    在微信登录中,如果是新用户,创建新的用户对象的步骤如下:

    1. 使用 openid 和当前时间(createTime)构造一个新的用户对象。
    2. 将该用户对象插入数据库。
    User user = User.builder().openid(openid).createTime(LocalDateTime.now()).build();
    userMapper.insert(user);
    
  6. 如何在后端进行 JWT 令牌的验证?
    后端通过解析传入的 JWT 令牌,检查其有效性。验证过程包括:

    1. 解析 token,获取其中的有效载荷。
    2. 根据密钥和过期时间判断 token 是否有效。
    3. 如果有效,提取出用户信息(如 openid)并继续处理业务逻辑。如果无效,则返回错误提示。
  7. 在微信登录的controller中,如何返回登录结果?
    在controller层中,登录结果通过封装为 VO 对象并返回给前端。具体实现是:

    1. 调用服务层的微信登录方法获取用户对象User。
    2. 根据用户对象生成 JWT 令牌。
    3. 构建 UserLoginVO 对象,包含用户 id、openid 和 token。
    4. 使用 Result.success() 方法将 VO 对象返回给前端。
  8. 如何在 WebMvcConfiguration 中配置拦截器?
    WebMvcConfiguration 中配置拦截器的方法如下:

    1. 创建拦截器类(如 JwtTokenUserInterceptor)用于统一处理 JWT 校验。
    2. addInterceptors() 方法中,注册该拦截器,并配置要拦截的路径。
    registry.addInterceptor(jwtTokenUserInterceptor).addPathPatterns("/user/**").excludePathPatterns("/user/user/login").excludePathPatterns("/user/shop/status");
    

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

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

相关文章

Jetson Xavier NX (ARM) 使用 PyTorch 安装 Open3D-ML 指南

由于 Jetson 为 ARM64 (aarch64) 的系统架构,所以不能用 pip install 直接安装,需要通过源码编译。 升级系统 JetPack 由于 Open3D-ML 目前只支持 CUDA 10.0 以及 CUDA 11.*,并且 JetPack 的 CUDA 开发环境只有10.2、11.4以及12.2&#xff0…

Juc22_什么是中断、interrupt、isInterrupted、interrupted方法源码解析、如何使用中断标识停止线程

目录 ①. 什么是中断 ②. 源码解读(中断的相关API) ③. 如何使用中断标识停止线程 ①. 什么是中断 ①. 一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止,所以,Thread.stop、Thread.suspend、Thread. resume都已经被废弃了 ②. 在Java中没有办法立即停止…

AI赋能医疗:智慧医疗系统源码与互联网医院APP的核心技术剖析

本篇文章,笔者将深入剖析智慧医疗系统的源码架构以及互联网医院APP背后的核心技术,探讨其在医疗行业中的应用价值。 一、智慧医疗系统的核心架构 智慧医疗系统是一个高度集成的信息化平台,主要涵盖数据采集、智能分析、决策支持、远程医疗等…

mongoDB常见指令

即使我们自己开发用不到mongoDB,但是接手别人项目的时候,别人如果用了,我们也要会简单调试一下 虽然mongoDB用的不是sql语句,但语句的逻辑都是相似的,比如查看数据库、数据表,增删改查这些 我们下面以doc…

K8S部署DevOps自动化运维平台

持续集成(CI) 持续集成强调开发人员提交了新代码之后,立刻自动的进行构建、(单元)测试。根据测试结果,我 们可以确定新代码和原有代码能否正确地集成在一起。持续集成过程中很重视自动化测试验证结果&#…

SpringCloud系列教程:微服务的未来(十七)监听Nacos配置变更、更新路由、实现动态路由

前言 在微服务架构中,API 网关是各个服务之间的入口点,承担着路由、负载均衡、安全认证等重要功能。为了实现动态的路由配置管理,通常需要通过中心化的配置管理系统来实现灵活的路由更新,而无需重启网关服务。Nacos 作为一个开源…

Lua 环境的安装

1.安装Lua运行环境 本人采用的是在windows系统中使用cmd指令方式进行安装,安装指令如下: winget install "lua for windows" 也曾使用可执行程序安装过,但由于电脑是加密电脑,最后都已失败告终。使用此方式安装可以安…

03-画P封装(制作2D+添加3D)

画P封装的方法2D制作3D添加 使用P封装自己画0603格式的电阻的P封装1. 看规格书,找参数2. 创建一个新的P封装3. 灯泡两侧放焊盘4.设置焊盘大小和形状5.根据坐标定义中间间隔: L/2原则6. 画最外层丝印(丝印层直接围住即可)7.在平面的P封装上,添加3D立体封装库 立创商城下载P封装向…

libOnvif通过组播不能发现相机

使用libOnvif库OnvifDiscoveryClient类, auto discovery new OnvifDiscoveryClient(QUrl(“soap.udp://239.255.255.250:3702”), cb.Build()); 会有错误: end of file or no input: message transfer interrupted or timed out(30 sec max recv delay)…

高德开放平台:红绿灯倒计时与车车协同安全预警,开启出行新时代

近期,有幸参加了“高德开放平台第二期开发者开放日”。这次活动不仅有机会近距离了解高德地图的前沿技术动态和最新产品,还看到了高德开放平台在各个行业中的广泛应用。高德展厅里,每一处展示都让人感到震撼,仿佛置身于一个充满无…

C语言------指针从入门到精通

第一部分: 前言: 本篇文章主要划分为两大部分: 第一部分适合零基础的同学,主要学习了解指针的概念,对指针大概有个概念。如果你已经有基础,即可跳过第一部分的内容。 第二部分主要是分解指针的实现逻辑,通过19个例子,再结合代码公式把不同类型的指针及指针的应用详细…

JavaScript赋能智能网页设计

构建AI驱动的实时风格迁移系统 案例概述 本案例将实现一个基于深度学习的实时图像风格迁移系统,通过浏览器端神经网络推理实现以下高级特性: WebAssembly加速的ONNX模型推理 WebGL Shader实现的风格混合算法 WebRTC实时视频流处理 基于Web Workers的…

‌Windows系统cmd命令行创建vue项目

Windows系统cmd命令行创建vue项目 首先确保node.js已安装(也就是JavaScript运行时环境已安装)找到我们要创建项目的文件夹 直接在路径上输入cmd 按Enter(回车键)后,弹出命令行窗口在命令行窗口输入npm init vuelatest,执行该命令,将会安装并执行Vue项目…

[C语言日寄]exit函数的使用及其拓展

【作者主页】siy2333 【专栏介绍】⌈c语言日寄⌋:这是一个专注于C语言刷题的专栏,精选题目,搭配详细题解、拓展算法。从基础语法到复杂算法,题目涉及的知识点全面覆盖,助力你系统提升。无论你是初学者,还是…

GestureDetector组件的功能与用法

文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了ListView响应事件的内容,本章回中将介绍GestureDetector Widget.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 我们在这里介绍的GestureDetector是一个事件响应Widget,它可以响应双击事件&…

Java Web-Cookie与Session

会话跟踪技术 会话跟踪技术是一种在 Web 应用程序中跟踪用户会话状态的机制,它允许服务器在多个请求之间识别和关联属于同一用户的请求,以便在整个会话过程中保持用户相关的信息。以下是几种常见的会话跟踪技术: Cookie 概念:Cook…

线性回归、协同过滤、基于内容过滤、主成分分析(PCA)

线性回归 使用item特征用户打分标签线性回归训练,最小化成本函数,得到每个用户的参数 协同过滤 协同过滤基于一个核心假设:相似的用户会有相似的兴趣,因此可以通过分析相似用户历史行为,来预测当前用户可能感兴趣的i…

WPS数据分析000009

一、函数与数据透视表统计数据时效率差异 函数 F4绝对引用 数据透视表 二、数据透视表基础操作 数据透视表:一个快速的生成报表的工具 显示详细信息 方式一; 方式二: 移动数据透视表 删除数据透视表 复制粘贴数据透视表 留足空间,否则拖动字…

idea实用设置

一.View 1.配置工具包方便按 二.File->Settings 点开设置然后进行后面的配置 1.这个看个人习惯 2.更新 3.更改菜单字体大小 4.鼠标控制字体大小 5.文件默认字体大小 6. 代码的智能提示功能 7.自动导包 8.编码 9.取消双击shift搜索

CE-PBFT:大规模联盟区块链的高可用一致性算法

摘要 区块链已广泛应用于农产品溯源、供应链管理、物流运输等各个领域。作为联盟区块链不可缺少的组成部分,共识算法保证了网络中每个节点的一致性和可信度。然而,由于通信过程的复杂性,现有的大规模联盟区块链场景中的共识算法存在低系统吞…