6.MidBook项目经验之前端nuxt优化SEO和手机登录,微信登录
1.nuxt服务端渲染技术SSR Server Side Render(ajax异步请求,SEO是靠爬虫抓取数据的,没有抓到数据排名靠后)
1.在用户端搭建(利于SEO) 1.解压后 npm install npm run dev
2.default.vue有 头内容和尾,创建头尾文件,然后加入到组件
3.每个前端系统对应一个单独的后台接口(太方便了,你终于不用写route文件,写繁杂的路由信息了)
2.nuxt路由(固定路由和动态路由[添加变化的数据])
window.location.href='/hosp';//会跳转到 /hosp/index.vue文件//在host文件夹下创建,动态路由文件夹规范 _开头 如 _hoscode.vue//会自动找到变量名对应的名字window.location.href='/hosp'+hoscode;
3.登录(手机号登录+验证码/微信登录)
1.网关判断登录状态(后面直接提取到User模块通过GlobalFilter判断全局状态,就不必每次请求都需要登录信息)2.加网关路径3.判断第一次登录
4.jwt工具生成(token放请求头,方便前端判断) 头信息(加密算法)+用户信息(自己传入)+签名信息(秘钥) 然后base64加密 放非隐私信息
//token过期时间和秘钥1.过程: 登录时生成token,然后与redis存的token对比
//下面的工具类可以根据需要得到对应的值
public class JwtHelper {//过期时间24小时内过期private static long tokenExpiration = 24*60*60*1000;//签名秘钥private static String tokenSignKey = "123456";//根据参数生成tokenpublic static String createToken(Long userId, String userName) {String token = Jwts.builder().setSubject("USER").setExpiration(new Date(System.currentTimeMillis() + tokenExpiration))//设置过期.claim("userId", userId).claim("userName", userName).signWith(SignatureAlgorithm.HS512, tokenSignKey)//加密算法.compressWith(CompressionCodecs.GZIP) //压缩.compact();return token;}//根据token字符串得到用户idpublic static Long getUserId(String token) {if(StringUtils.isEmpty(token)) return null;Jws<Claims> claimsJws = Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token);Claims claims = claimsJws.getBody();Integer userId = (Integer)claims.get("userId");return userId.longValue();}//根据token字符串得到用户名称public static String getUserName(String token) {if(StringUtils.isEmpty(token)) return "";Jws<Claims> claimsJws = Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token);Claims claims = claimsJws.getBody();return (String)claims.get("userName");}public static void main(String[] args) {String token = JwtHelper.createToken(1L, "lucy");System.out.println(token);System.out.println(JwtHelper.getUserId(token));System.out.println(JwtHelper.getUserName(token));}
}
5.手机登录
- 阿里云短信访问申请签名,模板得到accesskey(点头像)
- 引入依赖
<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId>
</dependency>
- 创建短信发送模块,需要在启动类exclude datasource,因为不使用数据库连接
- 写工具类,读取sms的配置信息创建bean对象
- redisTemplate.opsForValue.get(phone)//得到手机号对应的验证码map .set(phone,code,TimeUnit.MINUTES)
- 前端(放cookie)直接调用sms模块,往redis存,登录模块判断redis
6.前端vue需要npm装js-cookie才能使用cookie,点击可以直接改值
//!!!head.Vue引入Vue,可以调用全局登录事件,其他页面可以调用
7.用户认证放到网关
在gateway创建类实现GlobalFilter,Ordered
8.OAuth2解决开放系统间授权问题和单点登录(登录一个模块,其他模块不用登录)(就是CA[第三方公司]给我发token,我可以登录其他公司的账户操作)
- 为什么? 用户密码复制(用户密码给我去访问其他系统)不安全
- 通用开发者key,开发者和合作者共同开放一个同一的key去访问(我的公司去和百度合作)通常不合适
- 颁发令牌(百度颁发令牌给我,临时可以使用,需要token)
9.微信扫码登录(理清思路)
- 前端生成二维码,在页面调用微信地址加上配置信息(从服务器获得)
- 前端扫码二维码,设置回调地址,微信会返回页面(因为无法调用到本地页面,controller写相同的本地回调页面地址可以解决)
- 微信返回code给后端,加上秘钥去请求得到临时token,用httpclient(模拟浏览器请求,需要引入依赖)请求微信数据
使用StringBuffer.append("?aa=%s");//占位符 String.format(sb.toString,"name");
- 得到微信用户信息,openid不为空给openid,为空就需要后期绑定手机号
相关文章:
6.MidBook项目经验之前端nuxt优化SEO和手机登录,微信登录
1.nuxt服务端渲染技术SSR Server Side Render(ajax异步请求,SEO是靠爬虫抓取数据的,没有抓到数据排名靠后) 1.在用户端搭建(利于SEO) 1.解压后 npm install npm run dev 2.default.vue有 头内容和尾,创建头尾文件,然后加入到组件 3.每个前端系统对应一个单独的后台接口(太方便了…...
NR SRS power control
这篇看下NR SRS power control的相关内容,主要内容集中在38.213 7.3章节,SRS power control与PUSCH很类似,当然细节上也有所不同,这里简单看下。 UL功率控制,主要是PUSCH/PUCCH/SRS/PRACH的传输功率。 对于所有PUSCH/PUCCH/SRS传输…...
C++(boost):通过boost::process::child同步调用其他程序
boost提供了boost::process::child,可以通过其调用其他程序,并获得输出: #include <boost/process/child.hpp> #include <boost/process/io.hpp> #include <vector> #include <iostream> #include <string> #include <tuple>using nam…...
【经验分享】解决vscode编码问题
目录 先看一下我遇到的问题和你们的一不一样 下面是我查到的解决办法: 简单点说就是 我们看看解决后的效果 先看一下我遇到的问题和你们的一不一样 我一开始以为就是编码问题。 下面是我查到的解决办法: 这个错误提示看起来仍然是中文乱码。可能是由于…...
核酸管外观缺陷检测(一)
1.1 应用示例思路 (1) 对核酸管图像进行灰度化、阈值分割和连通域分析; (2) 筛选出待检测的区域,并对该区域进行变换校正; (3) 进一步获取待检测的ROI区域,并根据几何特征和阈值条件,来对核酸管外观进行检测&#x…...
NodeJS @kubernetes/client-node连接到kubernetes集群的方法
1. 首先,你需要在你的项目中安装kubernetes/client-node。你可以使用npm(Node Package Manager)来进行安装。在你的终端中输入以下命令: npm install kubernetes/client-node 2. 安装完毕后,你可以在你的代码中引入这…...
【基于Kmeans、Kmeans++和二分K均值算法的图像分割】数据挖掘实验三
文章目录 Ⅰ、项目任务要求II、原理描述KMeansKMeans二分K均值评价指标-轮廓系数 III、数据集描述IV、具体实现过程V、结果分析VI、完整代码VII、深度学习与图片分割(补充)CNN1. 卷积层(Convolutional Layer):2. 激活函…...
深入理解Java CompletableFuture并发编程模型
摘要:本文将介绍Java中的CompletableFuture类,探讨其在并发编程中的应用。我们将详细讨论CompletableFuture的特性、常见用法和最佳实践,帮助开发人员更好地利用这个强大的工具进行异步编程。 1. 什么是CompletableFuture? Compl…...
TensorFlow手动加载数据集(以mnist为例)
在进行Mnist手写识别的项目中,出现了Mnist数据集下载出错的问题,报出以下错误: Exception: URL fetch failure on https://s3.amazonaws.com/img-datasets/mnist.npz: None – [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主…...
C++项目实战——基于多设计模式下的同步异步日志系统(总集篇)
文章目录 专栏导读项目介绍开发环境核心技术环境搭建日志系统介绍1.为什么需要日志系统2.日志系统技术实现2.1同步写日志2.2异步写日志 前置知识补充不定参函数C风格不定参函数不定参宏函数设计模式六大原则单例模式饿汉模式懒汉模式 工厂模式简单工厂模式工厂方法模式抽象工厂…...
杨辉三角按列求和
假设求杨辉三角这一列 我们考虑这个格子: 然后对其不断展开 综上: ∑ i 0 n ( i k ) ( n 1 k 1 ) \sum_{i0}^n\binom i k\binom {n1}{k1} i0∑n(ki)(k1n1) ∑ i l r ( i k ) ( r 1 k 1 ) − ( l k 1 ) \sum_{il}^r\binom i k\binom{r1}{k…...
C复习-语句
参考: 里科《C和指针》 语句 C没有bool,是用整型代替的。因此if(expression)中,expression只要是可以产生整型结果即可,且0表示假,非0表示真。 如果有只靠缩进没有{}的else语句,会自动匹配离它最近的、不…...
[Python进阶] 操纵键盘:PyAutoGUI
6.5 操纵键盘:PyAutoGUI 6.5.1 keyDown、keyUp 按下或弹起某个按键。在按下时不会释放。 参数: key(str): 要按下的键。有效的名称列在KEYBOARD_KEYS。 logScreenshot:是否要截图并保存在当前文件夹下。 import pyautoguipyautogui.keyDown(f) # 模拟…...
jdbc快速开始
文章目录 快速开始参考文献 jdbc 就是使用java语言操作关系型数据库的一套api jdbc本质: 官方(sun公司)定义的一套操作所有关系型数据库的规则,就是接口各个数据库厂商去实现这套接口,提供数据库驱动jar包我们可以使用这套接口编程ÿ…...
C语言中static关键字用法
C语言中static关键字用法 2021年7月28日席锦 static关键字在c语言中比较常用,使用恰当能够大大提高程序的模块化特性,有利于扩展和维护。但是对于c语言初学者,static由于使用灵活,并不容易掌握。 变量 1.局部变量 普通局部变量是再…...
STM32-LCD液晶显示
LCD液晶显示 针对野火指南者配套资料:3.2寸 LCD电阻屏,屏幕里自带ILI9341液晶控制器芯片,该控制器芯片中存在GRAM(即显存)。该液晶控制器使用8080接口与单片机通讯,液晶面板引出来的FPC信号线为8080接口&am…...
GraphQL 查询:一个全面指南
GraphQL GraphQL 是一种 API 查询语言和运行时,用于使用现有数据完成这些查询。它为您的 API 中的数据提供了完整且易于理解的描述,让客户能够准确地询问他们需要什么,更容易随着时间的推移发展 API,并启用强大的开发人员工具。 …...
快速自动化处理JavaScript渲染页面的方法
目录 一、使用无头浏览器 二、使用JavaScript渲染引擎 三、使用前端框架工具 随着互联网技术的不断发展,JavaScript已经成为Web开发中不可或缺的一部分。然而,在自动化处理JavaScript渲染页面方面,却常常让开发者感到头疼。本文将介绍一些快…...
[计算机提升] 系统及用户操作
1.4 系统及用户操作 1.4.1 系统操作 1.4.1.1 开机、关机、重启 在Windows系统中,开机(Power On),关机(Shutdown)和重启(Restart)是指计算机的不同电源控制操作。 开机:…...
Linux篇 四、Linux修改用户名
Linux系列文章目录 一、香橙派Zero2设置开机连接wifi 二、香橙派Zero2获取Linux SDK源码 三、香橙派Zero2搭建Qt环境 文章目录 Linux系列文章目录前言一、更改用户名准备二、修改用户名总结 前言 想要把Ubuntu的普通用户名修改成自己想要的 一、更改用户名准备 LubanCat 镜像…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
微信小程序云开发平台MySQL的连接方式
注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
