图解用户登录验证流程

前言

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

业务图解

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

流程解读

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

  1. 填写手机号

  1. 发送验证码

  1. 填写验证码

  1. 勾选新用户自动注册

服务端-用户验证

  1. 验证账号验证码是否正确

  1. 验证用户是否存在(不存在出初始化用户信息)

  1. 完成验证生成token

  1. 将token返回给客户端

用户信息设计

验证流程图解

登录验证流程涉及到了两个接口,两个缓存。

  1. 获取验证码接口

,给手机号发送验证码并设置验证码缓存,设置过期时间。

  1. 登录接口

,提交手机号及验证码,读取缓存进行匹配验证,成功则生成token返回给客户端,客户端登录成功,登录后请求头携带token进行业务请求即可。

关于token过期时间

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

关于业务请求token验证

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

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

关于登出操作

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

关于匿名请求(免登录)

通常匿名请求放行有两种方案,

  1. 授权token,为token设置单位时间内请求次数;

  1. 配置路径放行规则,对请求接口路径进行正则匹配,符合正则规则的进行放行

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

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

关注公众号,学习更多 Java 干货!

技术实现

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

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

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

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

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

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

关于黑名单

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

  1. 用户管理页面提供一个拉黑的按钮,拉黑后,这些用户的id会存储到一个set集合中去

  1. 登录时候检查用户是否在黑名单中,是则拒绝登录并提示

  1. 如果用户已经登录后进行拉黑操作,网关会在鉴权通过后检查用户是否在黑名单中,是则删除token对应缓存,返回401,401就会跳到登录页,步骤2就会进行拦截。

总结

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java登录验证的实现可以参考以下步骤: 1. 创建一个获取验证码的接口,该接口负责给手机号发送验证码并设置验证码缓存,设置过期时间。可以使用短信服务提供商的API发送验证码短信,并将验证码存储在缓存中。\[1\] 2. 创建一个登录接口,该接口接收用户提交的手机号和验证码,并读取缓存中的验证码进行匹配验证。如果验证成功,则生成一个token,并将token返回给客户端。客户端在登录成功后的请求中需要携带该token进行业务请求。\[1\] 3. 在后端代码中,可以使用Java的框架(如Spring MVC)来处理登录验证逻辑。在登录接口中,可以通过调用缓存的API来获取和验证验证码。如果验证成功,可以使用JWT(JSON Web Token)来生成token,并将token返回给客户端。\[1\] 4. 在客户端代码中,可以使用JavaScript来处理登录页面的逻辑。可以通过AJAX请求将用户提交的手机号和验证码发送到后端登录接口进行验证。如果验证成功,可以将返回的token保存在客户端,以便在后续的业务请求中携带。\[2\] 5. 关于token的过期时间,可以根据客户端的类型来定义。例如,对于移动端(如app),可以设置较长的过期时间(通常一个星期)。对于web端,可以设置较短的过期时间(以小时为单位)。可以根据请求头信息来判断客户端的类型,并设置相应的过期时间。\[3\] 总结起来,Java登录验证的实现包括发送验证码、验证验证码、生成token和设置过期时间等步骤。可以使用缓存来存储验证码,并使用JWT来生成和验证token。根据客户端的类型来设置不同的过期时间。 #### 引用[.reference_title] - *1* *3* [【209期】图解用户登录验证业务流程面试应答推荐)](https://blog.csdn.net/afreon/article/details/122138616)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [java 如何实现登陆和注册的验证码功能](https://blog.csdn.net/niceLiuSir/article/details/78473803)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想静静码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值