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 镜像…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
Python爬虫(二):爬虫完整流程
爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
