一文搞懂用户登录验证流程(附图)

前言

本文通过图示及代码的方式介绍用户登录流程及技术实现,内容包括用户登录,用户验证,如何获取操作用户的信息以及一些黑名单及匿名接口如何免验证相关的实现。

结合网关相关知识食用更佳

业务图解

对于用户登录来说、涉及到了用户注册、登录验证几个方面,通过流程图演示如何处理(新用户/老用户)登录

image.png

流程解读

  • 客户端-登录界面(通常手机验证码登录)

    1.填写手机号 2.发送验证码 3.填写验证码 4.勾选新用户自动注册

  • 服务端-用户验证

    1.验证账号验证码是否正确 2.验证用户是否存在(不存在出初始化用户信息) 3.完成验证生成token 4.将token返回给客户端

用户信息设计

字段描述类型是否唯一
telephone手机号varchar
nickname昵称varchar根据业务决定是否可重复
account账号varchar
password密码varchar
create_time创建时间datetime
modify_time修改时间datetime
...省略小程序授权码等等、根据自身业务进行增加

验证流程图解

image.png

登录验证流程涉及到了两个接口,两个缓存。1.获取验证码接口,给手机号发送验证码并设置验证码缓存,设置过期时间;2.登录接口,提交手机号及验证码,读取缓存进行匹配验证,成功则生成token返回给客户端,客户端登录成功,登录后请求头携带token进行业务请求即可。

关于token过期时间

通常我们token的过期时间是根据客户端的类型来定义的,app的过期时间会更长一些(通常一个星期),web端过期时间以小时为单位,如果控制过期时间可以将web登录和app登录拆分为两个接口(能够分流,接口压力更小),或者是根据请求头信息进行判断即可,是移动端就设置7天,是web端就设置两小时。

关于业务请求token验证

登录成功后,客户端每次请求都会携带token,通常我们会有一个网关来进行token验证,网关用于登录验证的核心就是登录成功后写入的token作为key,值为用户基础信息的缓存,图解如下:

image.png

验证成功后,重写内部请求头,将用户的的id,账号,昵称信息放入请求头中,这样可以方便业务系统获取当前操作用户信息以及权限控制等等

关于登出操作

用户携带token请求登出接口,登出接口对token对应的缓存进行删除操作,返回401即可,客户端获取到401就会跳转到登录页面

关于匿名请求(免登录)

通常匿名请求放行有两种方案,1.授权token,为token设置单位时间内请求次数;2.配置路径放行规则,对请求接口路径进行正则匹配,符合正则规则的进行放行

方案1:授权token,限制单位时间请求次数

优点就是虽然是免登录接口,但是接口的操作对象可以追溯,请求次数可控,避免被非法利用;缺点就是需要更多的编码及配置工作

技术实现
  • 1.提供一个授权token管理页面,主要管理token使用者,token的值,单位时间访问次数(如每分钟60次)

  • 2.增删改查,将授权token存放到缓存中,使用map进行存储,key为token,值为每分钟访问次数

  • 3.单位时间计数缓存,过期时间为1分钟

这时候我们需要在上面的验证流程图基础上进行升级

image.png

请求次数检查代码实现
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import java.util.concurrent.TimeUnit;

/**

    • 授权token请求限制缓存

    • @author 热黄油啤酒

  • @since 2021-11-01
    */@Componentpublic class AuthTokenRequestLimitCache {

    @Autowiredprivate RedisTemplate<String, Integer> redisTemplate;

    private static final String AUTH_TOKEN_LIMIT_KEY_PREFIX = "auth_token_limit";

    /**

    • 请求次数+1并检查是否超限
    • @param token
    • @return 是否放行
      */public boolean incrementWithCheck(String token) {// 1.获取token请求次数限制,获取为null代表授权配置已被修改,此token已经不具备权限Integer limit = getLimit(token);if (limit == null) {return false;
      }// 2.组装缓存key,读取缓存String key = String.join(":", AUTH_TOKEN_LIMIT_KEY_PREFIX, token);Integer count = redisTemplate.opsForValue().get(key);// 3.没有值代表一分钟内没有请求产生了if (count == null) {// 初始化值
      redisTemplate.opsForValue().increment(key);// 设置过期时间
      redisTemplate.expire(key, 1L, TimeUnit.MINUTES);return true;
      }// 自增并获取当前值 大于限制的话 返回false 网关过滤器返回提示信息(如请求过于频繁)Long inc = redisTemplate.opsForValue().increment(key);return inc <= limit;
      }

    /**

      • 获取限值
      • @param token
    • @return
      */public Integer getLimit(String token) {Object limit = redisTemplate.opsForHash().get("auth_token_limit", token);return limit == null ? null : (Integer) limit;
      }
      }复制代码

对于授权接口,通常是只允许get操作,对数据进行提交或者更新是不被允许的,当然这个是业务层面的,最终取决于系统设计

方案2:请求路径正则校验

我们在网关的配置文件中增加匿名接口规则,请求到网关时,检查请求的路径是否符合匿名接口规则,是则放行,不是则进行token校验,方案比较简单,只需要对网关进行处理即可。

关于黑名单

对于一个系统来说,黑名单是最后一道关卡,所以为了安全我们需要对问题用户进行黑名单操作,具体实现也比较简单

  • 1.用户管理页面提供一个拉黑的按钮,拉黑后,这些用户的id会存储到一个set集合中去
  • 2.登录时候检查用户是否在黑名单中,是则拒绝登录并提示
  • 3.如果用户已经登录后进行拉黑操作,网关会在鉴权通过后检查用户是否在黑名单中,是则删除token对应缓存,返回401,401就会跳到登录页,步骤2就会进行拦截。

总结

用户系统是非常基础的系统,但是很多程序员工作中可能并没有真正的参与到用户系统的开发,通过此文可以对用户登录流程及配套功能有一个全面的了解。

其它登录鉴权相关文章

阿里需求挑战-十分钟内连续登录5次失败,需要等待30分钟才能登录【附图】 - 掘金 (juejin.cn)

快速搭建一个网关服务,动态路由、鉴权看完就会(含流程图) - 掘金 (juejin.cn)

来源:https://juejin.cn/post/7025768845075808286
小明的学习圈子
关注 关注
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
用户登录注册流程图-所有项目论文通用计算机毕业设计
02-06 1万+
输入时,用户必须输入用户名和密码。系统确认用户输入的信息。如果用户的输入不正确,则用户需要知道登录失败原因。如果用户输入正确,则访问成功。消费者必须注册才能购买商品,注册流程如图4.3所示。用户登录流程图如图4.4所示。
用户登录注册机制
weixin_39553153的博客
09-22 3999
用户登录注册机制 一、账号就像是产品体系下的身份证 比如对于微信来说,每个账号的消息、朋友圈、通讯录、各种服务都不相同,账号将这些区分隔离并加以保护。只有确认了账号,确认了身份,才会让用户进入产品中使用。 那么是不是所有产品都需要账号体系? 答案肯定是否定的。 『如无必要,勿增实体』,如果用户与产品之间不需要建立绑定联系,不需要根据账号信息进行数据分发,那么可以没有账号。比如一些工具型的产品:一些小型游戏、秒表、计算器等 二、完整的账号体系业务主要包括五个模块: ...
登录流程图
05-13
用VISOL软件画的流程图,登录注册流程图
常见登录流程流程图总结
ganxueyun的专栏
08-20 87
常见的登录流程图
用户登陆流程图01
小马小马记不住密码
11-22 1485
用户登陆流程图01 【寄语】:我希望你有温度,希望你永远激情。
用户登录验证流程图
热门推荐
红壶吃猬队的博客
03-26 2万+
Created with Raphaël 2.1.2开始登录页面提交验证验证用户验证获取用户是否保存用户名及密码用户名及密码压入cookie用户信息压入session更新登录时间或记录登录日志告知用户成功登录并跳转到首页结束告知用户相关信息yesnoyesnoyesno...
简单版的登录流程图
JE_nnifer的博客
09-14 9971
APP登录流程图 登录过程参考京东手机端的登录流程 简单版的流程图,暂不考虑异常情况。
一文搞懂混合动力汽车
01-14
经过4S店销售的一顿狂轰乱炸,你还是搞不懂混合动力汽车有插电式与非插电式之分,还有串联式、并联式、混联式的区别。 无妨,接着看下文也许你就懂了! 混合动力汽车透视图 传统汽车由内燃机燃烧...
一文搞懂CAN总线的AUTOSAR网络管理
01-27
如此之后,用户只需要专心负责应用层功能开发即可,底层都交给AutoSAR工程师就行了。再直白一点:“就是一套写的比较好的底层软件”。其实现了硬件驱动的封装(类似于STM32的库),实现了操作系统的功能。用户只需要...
一文搞懂模拟退火算法(Simulated Annealing,SA)
02-17
模拟退火算法一文搞懂模拟退火算法(Simulated Annealing,SA)一文搞懂模拟退火算法(Simulated Annealing,SA)一文搞懂模拟退火算法(Simulated Annealing,SA)一文搞懂模拟退火算法(Simulated Annealing,SA)...
一文搞懂SPI通信协议
02-14
一文搞懂SPI通信协议
用户登录流程图.doc
12-21
用户登录流程图.doc
单点登录流程图
12-06
单点登录设计,详细流程图。没有跨域名,使用二级域名共享机制实现
产品必备--登录注册功能流程图
10-28
作为移动产品经理,项目经理,必须清楚一款产品最主要的用户注册登陆流程的全部解决思路。
Java多线程详解+代码实例 一文搞懂.pdf
最新发布
08-22
Java多线程详解+代码实例 一文搞懂.pdf
用户登录流程图
seekyoubagain的博客
06-28 144
登录流程图
用户登录过程描述
weixin_30664539的博客
04-03 2207
-用户在浏览器中输入用户名密码信息,点击提交; -浏览器发出http request,用户信息存放在请求的body中; -服务器接收到request之后,读取用户信息,在DB中与用户信息表对照,验证用户是否存在; -如果用户不存在,发送http response到浏览器,浏览器进行渲染后显示提示信息:用户名/密码不存在; -如果用户存在,首先在服务器端的内存中生成一条sessio...
用户注册登录程序流程图
05-26
以下是用户注册登录程序的流程图: ![用户注册登录程序流程图](https://i.imgur.com/tTtXO5j.png) 1. 用户进入网站,选择注册或登录操作。 2. 如果用户选择注册,系统会要求用户填写必要的信息,如用户名、密码、电子邮件地址等。 3. 用户填写完信息后,系统会检查这些信息是否符合规定,并将其存储到数据库中。 4. 如果用户选择登录,系统会要求用户输入用户名和密码。 5. 系统会验证用户输入的信息是否与数据库中存储的信息相符。 6. 如果验证成功,系统会将用户重定向到其个人账户页面,否则系统会向用户显示错误信息。 7. 用户可以在个人账户页面上查看其个人信息、修改密码、注销账户等操作。 8. 用户在完成操作后,可以选择退出网站。
写文章

热门文章

  • 168张图,万字长文,手把手教你开发vue后台管理系统 23730
  • springboot 防止重复提交 8785
  • 防止数据重复提交的6种方法(超简单)! 8682
  • 深入讲解VsCode各场景高级调试与使用技巧 7534
  • Spring Security中文文档 6657

分类专栏

  • 代码生成器 2篇
  • 项目 2篇
  • SQL 3篇
  • mybatis 1篇
  • maven 1篇
  • AI 1篇
  • ChatGPT
  • Json 2篇
  • 前后端传值 1篇
  • java集合数组循环遍历 1篇
  • 字符串拼接 1篇
  • 接口防刷、重复提交 1篇
  • PDF 1篇
  • Nacos 1篇
  • Excel 1篇
  • MySql开发规范 1篇
  • vue循环遍历 1篇
  • vue2 3篇
  • 文件 1篇
  • 图片识别 1篇
  • Spring成神之路 56篇
  • maven专题
  • SpringAOP专题
  • SpringAOP
  • Redis
  • Redis专题
  • mybatis专题
  • spring专题
  • MySQL专题
  • MySQL
  • spring
  • 设计模式
  • vue cli 1篇
  • vue环境 2篇
  • 重复提交 1篇

最新评论

  • 110 个主流 Java 组件和框架整理,常用的都有,建议收藏!!

    车干菌: 毛用没有

  • 168张图,万字长文,手把手教你开发vue后台管理系统

    2301_78242945: 求后端啊啊啊

  • 168张图,万字长文,手把手教你开发vue后台管理系统

    2301_78242945: 求后端代码

  • 168张图,万字长文,手把手教你开发vue后台管理系统

    m0_62738788: 救了我的命了!

  • springboot+vue前后端分离基于vue的地方美食分享网站

    CSDN-Ada助手: Vue入门 技能树或许可以帮到你:https://edu.csdn.net/skill/vue?utm_source=AI_act_vue

大家在看

  • 初学者学scala
  • 抖音直播录制工具NRecorder,界面易操作,免费使用
  • Spring Boot技术栈:蜗牛兼职网案例
  • 【配置管理】1、配置管理概述 99
  • 初学者学SQL

最新文章

  • ORACLE根据字段生成自增的序列
  • springboot+mybatisplus动态表名、多表分页
  • springboot+vue前后端分离选课管理系统
2024年6篇
2023年161篇
2022年414篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

天下网标王泰安企业网站优化方案梅州网站seo关键词优化百度优化好的网站架构永宁网站seo优化ceo怎样优化网站的无锡梅村网站优化赣州网站排名优化崇州网站优化怎么收费崇明区电子网站优化价格布吉网站关键词优化哪家好网站怎么优化搜索怀宁网站优化优化网站收费标准常州优化网站济南网站seo优化网站优化关键词价格松江区谷歌网站优化平台永城专业网站优化推广哪家好枣庄泰安网站优化费用公司天河区网站优化报价石家庄seo网站排名优化公司金华专业网站优化服务掇刀区网站排名优化要多少钱常德运营营销型网站优化新泰市网站优化哪里有翔安区网站首页优化公司灵武网站seo优化虎门家具网站优化公司哪家好seo优化网站收录下降南平网站优化在线咨询香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

天下网标王 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化