项目(今日指数之登录功能)

news2024/11/26 5:15:50

今日目标


1. 完善基于前后端分用户验证码登录功能;
2. 理解验证码生成流程,并使用postman测试;
3. 理解并实现国内大盘数据展示功能;
4. 理解并实现国内板块数据展示功能;
5. 理解后端接口调试和前后端联调的概念;

1.验证码登录功能


1.1 验证码功能分析

1)前后端分离架构的session问题

单体架构session实现验证码流程:

解释:

如果前端后端都在一个工程下 统一部暑 首先访问验证码接口 将生成校验码保存在后台session下

每个session都有一个sessionid 也就是说验证码在后台保存了一份 然后将sessionid放到cookie中

响应给前端 把验证码也给前端 这样子在前端我们能够拿到验证码 也可以拿到sessionid,这样子的话 当我们输入验证码,点击登录后 就可以把sessionid和验证码带回去给后台 因为cookie来自于服务器,不存在跨域问题问题 所以服务端接收到请求之后 就可以从cookie中解析到sessionid sessionid获取到之后 根据K:V值就可以获取验证码 然后在与后台根据sessionid获取保存的验证码进行对比

但是当前我们的项目存在跨域问题 cookie不同源 前端的cookie是无法发送到服务器后端 所以后端拿不到前端的sessionid

当前我们的项目采用前后端分离的技术架构,因为前后端请求存在跨域问题,会导致请求无法携带和服务器对应的cookie,导致session失效,且后续服务端也会做集群方案部署,整体来看使用session方案带来的扩展和维护成本是比较高的!

2)验证码逻辑分析

我们可使用分布式缓存redis模拟session机制,实现验证码的生成和校验功能,核心流程如下:

解释:

第一次请求:

刚开始时 第一次 页面一加载 接口主动访问, 访问地址是api/captcha

请求经过代理之后 就来到了服务器后端 后端先生成验证码 然后把验证码保存在redis下 这样子的话 哪怕到时做集群 大家都访问的是共同的服务 都能做到共享 也就是由原来要放到session中的缓存数据 现在把他们放在公共的redis下(公共的缓存区域)

然后在把后台生成的验证码响应给前端 前端就能够得到后台随机生成的验证码 这样用户就可以存入这个验证码 之后 我们在点击登录 就可以发起了第二次请求

第二次请求

携带用户输入的验证码登录 地址是/api/login/ 这样就把前端用户输入的验证码转入后台 后台在从redis获取到验证码和前端传入的验证码进行比较 如果不是 就是销毁 如果是 就说明验证成功

思考:存储redis中验证码的key又是什么呢?

模拟sessionId ,我们可以借助工具类生成全局唯一ID;

3)验证码生成接口说明

请求路径:/api/captcha
请求参数:无
响应数据格式:
    {
        "code": 1,
        "data": {
            "code": "5411", //响应的验证码
            "rkey": "1479063316897845248" //保存在redis中验证码对应的key,模拟sessioinId
        }
    }

1.2.redis环境集成

前后端分离后,后台session无法共享使用,所以我们可以把验证码数据存入redis中,所以接下来,backend项目中先引 入redis的依赖:

<!--redis场景依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- redis创建连接池,默认不会创建连接池 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
</dependency>
<!--apache工具包,提供验证随机码工具类-->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
</dependency>

yml配置redis:

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

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

相关文章

【JAVA】jdk8 Stream 排序精通

背景 jdk8的stream流能方便的排序&#xff0c;但是每次都要查资料&#xff0c;非常不方便&#xff0c;不确定&#xff0c;所以这次直接弄懂&#xff0c;不再迷茫。 转载请注明来源&#xff0c;创作不易&#xff0c;请多多支持。 基础排序 stream流 大家应该都比较熟悉了&…

react-01-jsx语法与react实例三大属性与react生命周期

英文官网: https://reactjs.org/ 中文官网:https://react.docschina.org/ 基本知识 1、jsx语法 标签中使用js表达式用{} jsx中样式叫className 内联样式使用style{{key:value}}去写 只有一个根标签 标签必须闭合 标签首字母 (1).若小写字母开头&#xff0c;则将该标签…

网络安全领域中CISP证书八大类都有什么

CISP​注册信息安全专业人员 注册信息安全专业人员&#xff08;Certified Information Security Professional&#xff09;&#xff0c;是经中国信息安全产品测评认证中心实施的国家认证&#xff0c;对信息安全人员执业资质的认可。该证书是面向信息安全企业、信息安全咨询服务…

P1217 [USACO1.5]回文质数 Prime Palindromes

[USACO1.5]回文质数 Prime Palindromes 题目描述 因为 151151151 既是一个质数又是一个回文数&#xff08;从左到右和从右到左是看一样的&#xff09;&#xff0c;所以 151151151 是回文质数。 写一个程序来找出范围 [a,b](5≤a<b≤100,000,000)[a,b] (5 \le a < b \l…

idea使用本地代码远程调试线上运行代码---windows环境

场景&#xff1a; 今天在书上看了一个代码远程调试的方法&#xff0c;自己本地验证了一下感觉十分不错&#xff01;&#xff01; windows环境&#xff1a; 启动测试jar包&#xff1a;platform-multiappcenter-base-app-1.0.0-SNAPSHOT.jar 测试工具&#xff1a;postman,idea 应…

java日志查看工具finder介绍

目录 一、finder介绍 二、单节点部署 1、服务器需要安装Tomcat&#xff0c;以2.82.16.35为例 2、进入Tomcat下目录webapps下&#xff0c;创建FIND目录&#xff0c;进入FIDN目录 3、下载findweb插件&#xff0c;解压缩 4、登录页面&#xff0c;配置 5、添加日志路径 三、…

MongoDB 聚合

MongoDB 聚合 MongoDB 中聚合(aggregate)主要用于处理数据(诸如统计平均值&#xff0c;求和等)&#xff0c;并返回计算后的数据结果。 aggregate() 方法 MongoDB中聚合的方法使用aggregate()。 语法 aggregate() 方法的基本语法格式如下所示&#xff1a; >db.COLLECTION…

【基础】性能测试,从0到实战(手把手教,非常实用)

一、性能基础 什么是性能测试--->本质? 基于协议来模拟用户发送的请求&#xff08;业务模拟&#xff09;&#xff0c;对服务器形成一定负载。关注点&#xff1a;时间性能、空间性能与界面无关 性能测试分类 性能测试&#xff08;狭义&#xff09; 性能测试方法是通过模…

2023.2.13 调整接口中日志的调用方法

如下&#xff0c; 这是目前我们在接口中调用的方法&#xff0c;可以看到目前使用的是call mehtod 调用类方法的写法 调用的是ZHA047_CL_TOOL 中的这个SAVSTRU_DEST_R方法 输入为 dest_r (系统区分标识[returing时使用]&#xff0c;用于识别是从哪个系统来的调用命令) 输出为 d…

如何使用微软bing的chatGPT

bing集合了chatGPT&#xff0c;今天介绍一下&#xff0c;如何申请加入到列表&#xff0c;体验一下。未来几个月&#xff0c;bing应该会放开chatGPT的接入&#xff0c;这样国内也可以用到这个技术了。 想要提前用到bing的chatGPT的&#xff0c;可以先按照我的方法申请一下&…

ElasticSearch简介

文章目录ElasticSearch简介正向索引和倒排索引正向索引倒排索引ElasticSearch和MySQL的区别ElasticSearch简介 什么是ElasticSearch&#xff1f; ElasticSearch 是一款非常强大的开源搜索引擎&#xff0c;可以帮助我们从海量的数据中快速找到需要的内容。 什么是ELK&#xff1…

C/C++排序算法(三)—— 冒泡排序和快速排序

文章目录前言1. 冒泡排序&#x1f351; 基本思想&#x1f351; 图解冒泡&#x1f351; 动图演示&#x1f351; 代码实现&#x1f351; 代码优化&#x1f351; 特性总结2. 快速排序&#x1f351; hoare 版本&#x1f345; 图解过程&#x1f345; 动图演示&#x1f345; 代码实现…

K_A12_005 基于STM32等单片机采集红外寻迹避障模块串口与OLED0.96双显示

K_A12_005 基于STM32等单片机采集红外寻迹避障模块串口与OLED0.96双显示一、资源说明二、基本参数参数引脚说明三、驱动说明模块工作原理:对应程序:四、部分代码说明1、接线引脚定义1.1、STC89C52RC红外寻迹避障模块1.2、STM32F103C8T6红外寻迹避障模块五、基础知识学习与相关资…

R语言系列教程-----一起来学shiny吧(1)

什么是shiny&#xff1f;Shiny是一个R包&#xff0c;可让您轻松地直接从 R 构建交互式 Web 应用程序&#xff08;应用程序&#xff09;。本系列是个长教程&#xff0c;带你由浅入深学习shiny。 我们先使用系统自带的一个例子来介绍一下shiny&#xff0c;我们先导入shiny包 li…

RK3568开发笔记

一、了解MASKROM模式 出厂的时候&#xff0c;没有任何固件&#xff0c;但CPU有一块EPROM存储区&#xff0c;放有一个BOOTROM小启动程序。 这就是MASKROM模式。 使得首次烧写FLASH成为可能&#xff0c;不需要拆FLASH到烧录器上。 在MASKROM下&#xff0c;烧写UPDATE.IMG文件&…

Java实现碧蓝航线连续作战

目录一.实现功能二.主要思路三.代码实现四.用exe4j生成.exe程序五.最终效果六.代码开源一.实现功能 主线图作战结束到结算页自动点击再次前往 二.主要思路 判断是否进入了结算界面&#xff1a;记录结算界面某个像素点的RGB值&#xff0c;每隔3秒对这个像素点进行比对 移动鼠标…

浅入浅出keepalived+nginx实现高可用双机热备

对应用keepalivednginx技术实现nginx高可用进行简单的分析&#xff0c;下面是通过对keepalived添加校验nginx存活脚本&#xff0c;监控nginx的状态&#xff0c;应用keepalived的主备模式实现nginx的高可用。 假如192.168.100.2和192.168.100.3两台机器安装了nginx&#xff0c;负…

C++深入浅出(九)—— 多态

文章目录1. 多态的概念2. 多态的定义及实现&#x1f351; 多态的构成条件&#x1f351; 虚函数&#x1f351; 虚函数的重写&#x1f351; 虚函数重写的两个例外&#x1f351; C11的override 和 final&#x1f351; 重载、覆盖(重写)、隐藏(重定义)的对比3. 抽象类&#x1f351;…

微信中如何接入chatgpt机器人才比较安全(不会收到警告或者f号)之第二步注入dll文件

大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂。 前言 上一篇文章我们提到过,微信中如何接入chatgpt机器人才比较安全(不会收到警告或者f号)之第一步登录微信,需要的大家可以点进去看。 文接上篇,本文主要介绍如果将机器人接入到微信中的方法之一,别的方法后面专…

如何快速了解项目源文件的构成?基于 Node.js 实现项目源代码数据统计工具

当希望了解一个项目的代码规模时&#xff0c;首先可能会想对项目源文件的数量、类型分布、代码行数等做一下数据统计。使用 Linux/git 命令可以满足简单的统计需求&#xff0c;使用流行的 cloc 工具可以实现详细的源代码分析数据。此外也可以使用 Node.js 编码简单的实现个性化…