基于Session实现登录流程

2023-10-27

流程一:发送短信验证码

  • 用户在提交手机号后,会校验手机号是否合法,如果不合法,则要求用户重新输入手机号

  • 如果手机号合法,后台此时生成手机号对应的验证码(后台先得到验证码),同时将验证码保存到session中,然后再通过短信的方式(测试中输出到控制台即可)将验证码发送给用户。

流程二:基于短信验证码/密码实现登录、注册

  • 用户将验证码和手机号进行输入,后台从session中拿到当前手机号对应的验证码,然后和用户输入的验证码进行校验,如果不一致,则无法通过校验,如果一致,则后台根据手机号查询用户,如果用户不存在,则为用户创建账号信息,保存到数据库(创建新用户),无论是否存在,都会将用户信息保存到session中,方便后续获得当前登录信息。

  • Sessiom是基于cookie的。每一个session都有一个sessionId保存在cookie当中。当用户来请求的时候会携带上自己的cookie。就可以基于cookie拿到session并且从session中拿到用户对象。

  • 并且不需要返回登陆凭证token.因为当前登录基于session实现,每一个session对应一个唯一的sessionId,在访问tomcat时sessionId已经自动保存到了cookie中。之后每次请求都会携带cookie(具有sessionId),从而得到用户对象。

流程三:校验登录状态(任意请求发起时)

  • 用户在发起任意请求的时候,会携带cookie(Cookie包含JsessionId)到后台,后台通过JsessionId从session中拿到用户信息,如果没有session信息,则进行拦截如果有session信息,则需要将当前的用户信息保存到ThreadLocal中(当前的线程域对象),方便后续的业务使用,并且放行该请求。

  • ThreadLocal是一个线程域对象,会将数据(此时即保存当前登录的用户信息)保存到每一个线程的内部(在线程的内部创建一个map来保存)。这样每一个线程都会有自己独立的存储空间,不会相互干扰。如果只是创建一个普通的本地环境变量来保存当前用户,则会出现多线程并发修改的安全问题。在threadLocal中,无论是他的put方法和他的get方法, 都是先获得当前用户的线程,然后从线程中取出线程的成员变量map,只要线程不一样,map就不一样,所以可以通过这种方式来做到线程隔离。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于Session实现登录流程 的相关文章

  • 从txt文件中读取数据而不下载它?

    我想从提供的文本文件中解析信息 有没有一种方法可以在应用程序中执行此操作 而无需先下载文件 以某种方式传输文本内容 打开到 URL 的 Http 连接 使用内置 HttpURLConnection 或使用 commons httpclien
  • java中高效的输入流到字符串方法

    因此 我在 Java 中的 诚然非常简单 应用程序上运行探查器 令我惊讶的是 仅次于需要在时间上发出 HTTP 请求的方法的是我的方法 inputStreamToString方法 目前它的定义如下 public static String
  • Jenkins 未显示 Maven 编译器错误

    在 Jenkins 中构建多模块 maven 3 项目时 如果出现构建错误 我们会收到一条神秘消息 表明 Maven 编译器插件失败 这在上周才刚刚开始发生 INFO BUILD FAILURE INFO INFO Total time 1
  • Java:一种将 Mime(内容)类型与 CommonsMultipartFile 中的文件扩展名相匹配的方法

    在我的公司 出于额外原因 我需要将 mime 类型与文件扩展名进行比较 我有一个CommonsMultipartFile 我正在尝试找出进行这种比较的最佳方法 我见过一个MimetypesFileTypeMap 但不确定这是否适用于此 我试
  • 清空变量不会使方法引用无效[重复]

    这个问题在这里已经有答案了 为什么代码不抛出NullPointerException当我使用与变量绑定的方法引用时dog我后来分配了null to 我正在使用 Java 8 import java util function Functio
  • 传递自定义类型查询参数

    如何接受自定义类型查询参数 public String detail QueryParam request final MYRequest request 上面的行在启动服务器时出现错误 jersey server model ModelV
  • 当我们使用赋值而不是比较时,如何评估 if/while 条件?

    我在学习 Java 的 OCA OCP 时发现了这个令人惊讶的事情 下面是第一段代码 其中 if 测试条件 部分 让我惊讶 public class BooleanIf public static void main String args
  • Google 表格使用 API 密钥而不是 client_secret.json

    In the QuickStart java示例Java 快速入门 https developers google com sheets api quickstart java他们使用OAuth client ID识别该应用程序 这会弹出一
  • 使用正则表达式验证电子邮件的最大长度

    我找到了用于电子邮件验证的正则表达式 a z0 9 a z0 9 a z0 9 a z0 9 a z 2 4 我希望电子邮件的最大长度为 20 个字符 因此我将其更改为 a z0 9 a z0 9 a z0 9 a z0 9 a z 2 4
  • java:为什么主线程等待子线程完成

    我有一个简单的java程序 主线程 main 创建并启动另一个线程t class T extends Thread Override public void run while true System out println Inside
  • 如何检查单词是否在wordNet中

    我开始了解wordNet直到我知道我找到了synonymous对于一个特定的词 现在我有一个文件 我想使用标记化该文本n gram例如 String s I like to wear tee shirt 使用后n gram这将是 I lik
  • 扩展多个类

    我知道 Java 不支持多重继承 因为不允许扩展多个类 我只是想知道我的问题是否有解决方法 我有一个名为CustomAction需要扩展两个抽象类 BaseAction and QuoteBaseAction 我无法更改这些抽象类中的任何一
  • java绕中心旋转矩形

    我想围绕其中心点旋转一个矩形 它应该保留在应该绘制的位置并在该空间中旋转 这是我的代码 AffineTransform transform new AffineTransform transform rotate Math toRadian
  • 为休息服务实施 JUnit 测试

    我必须为我的休息服务实现一些 JUnit 测试 例如 这是我的休息服务之一 Path dni fe public class HelloWorld POST Path home Consumes MediaType APPLICATION
  • 如何在 JmsMessagingTemplate.sendAndReceive 上设置等待超时

    我在 MVC 控制器中使用 JmsMessagingTemplate 的 sendAndReceive 但如果没有发送回复消息 它似乎会永远等待回复 该文档指出 返回 回复 如果无法接收消息 例如由于超时 则可能为 null 然而 我只是不
  • 在 Eclipse RCP 应用程序中禁用插件贡献

    我经常遇到这个问题 但尚未找到解决方案 每当我编写一个新的基于 Eclipse RCP 的应用程序并包含来自 Eclipse 平台的插件时 我都会 继承 其中一些插件的 UI 贡献 大多数贡献 菜单项 键盘快捷键 属性页 都很有用 但有时我
  • 添加 char 和 int

    据我了解 字符是一个字符 即一个字母 一个digit 标点符号 制表符 空格或类似的东西 因此 当我这样做时 char c 1 System out println c 输出 1 正是我所期望的 那么为什么当我这样做时 int a 1 ch
  • 线程数组?

    所以我在理解如何避免线程的顺序执行时遇到了问题 我试图创建一个线程数组并在单独的循环中执行 start 和 join 函数 这是我现在拥有的代码示例 private static int w static class wThreads im
  • 在 Spring MVC 中将请求写入文件

    我希望能够将整个请求写入 Spring MVC 控制器中的文件 我已尝试以下操作 但即使我使用大量参数发出 POST 请求 文件也始终为空 RequestMapping method RequestMethod POST value pay
  • 难以理解 通配符

    我有一个非常基本的问题 下面的代码无法编译 假设 Apple Extends Fruit List

随机推荐

  • 贪心算法解决最小集合覆盖问题

    AVL自平衡树 关键就是对于递归的每一步插入都要进行判断 而不是对于root节点进行判断 ac代码 include
  • Web 前端开发技术 ——html

    Web 前端开发技术 html 文章目录 Web 前端开发技术 html 一 html 文件结构 二 文本 三 图片 四 音频和视频 五 超链接 六 表单 七 列表 八 表格 九 语义标签 一 html 文件结构 html的所有标签为树型结
  • Mybatis-Plus代码自动生成器

    代码自动生成器 public class EasyCode public static void main String args 需要构建一个 代码自动生成器 对象 AutoGenerator mpg new AutoGenerator
  • Qt程序的发布

    QT相关技术问题 一 QT程序的发布 1 在程序中运行debug或者release 占用较少的内存 之后 复制release中的exe文件 放在新的文件夹中 比如 我的第一个QtAPP发布 2 部署环境设置 部署依赖 找到安装目录下的win
  • Lattice学习总结中……

    1 Lattice官网 http www latticesemi com 2 需要注册一下 sign in 按要求填写一下 3 注册完之后 在官网的首页 Products 下载Lattice的设计环境 ispLEVER classic 4
  • C++ STL --哈希表

    目录 1 unordered系列关联式容器 1 1 unordered map 1 1 1 unordered map的文档介绍 1 1 2 unordered map的接口说明 1 2 unordered set 1 3 在线OJ 2 底
  • java grid动态行合并,CSS Grid布局:合并单元格布局

    CSS Grid布局 网格单元格布局 一文中通过一些简单的实例介绍了如何给容器定义网格 并且怎么使用网格线或者网格区域来实现单元格这样的简单的布局 在文章结尾之处也提到过 这样的单元格如同表格一样 仅仅一个个独立的单元格是无法满足一些复杂的
  • nestjs 优秀的ORM框架sequelize操作数据库

    奉上最新代码 nestjs服务demo代码 gitee地址 github地址 nodejs的ORM sequelize 笔者在使用koa2开发后端服务的时候用的ORM框架是sequelize 觉得挺好用的 也做了分享 node从入门到放弃系
  • 安卓psp模拟器哪个好_更完美!安卓PSP模拟器PPSSPP 0.9.9发布

    PConline 资讯 最好的安卓PSP模拟器PPSSPP 0 9 9新版发布下载了 PPSSPP是最强的PSP模拟器 在PC 安卓和iOS上均有对应版本 笔者曾经简单介绍过PPSSPP安卓版的用法 详情可以点此查看PPSSPP教程 现在
  • HiveSQL:求累计访问量

    数据 userId visitDate visitCount u01 2017 1 21 5 u02 2017 1 23 6 u03 2017 1 22 8 u04 2017 1 20 3 u01 2017 1 23 6 u01 2017
  • 10个常见的Redis面试"刁难"问题

    导读 在程序员面试过程中Redis相关的知识是常被问到的话题 作为一名在互联网技术行业打击过成百上千名的资深技术面试官 本文作者总结了面试过程中经常问到的问题 十分值得一读 作者简介 钱文品 老钱 互联网分布式高并发技术十年老兵 目前任掌阅
  • docker搭建测试(项目)管理平台jira

    1 下载镜像 使用docker下载jira和mysql的镜像 docker pull cptactionhank atlassian jira software docker pull mysql 5 6 docker images 查看是
  • Font shape `OMX/cmex/m/n‘ in size <10.53937> not available (Font) size <10.95> substituted.

    Latex在写公式时 报如下错误 Font shape OMX cmex m n in size lt 10 53937 gt not available Font size lt 10 95 gt substituted 解决方案 在 b
  • Web指纹识别技术研究与优化实现(CMS)

    本文通过分析web指纹的检测对象 检测方法 检测原理及常用工具 设计了一个简易的指纹搜集脚本来协助发现新指纹 并提取了多个开源指纹识别工具的规则库并进行了规则重组 开发了一个简单快捷的指纹识别小工具TideFinger 并实现了一套在线的指
  • python爬虫实践-01-携程酒店评论的爬取

    0 关键 携程网其最大的特点就是 基本上所有的有效数据都是通过Ajax异步请求获取的 本博客的主要内容为 构造Ajax请求 获得返回的reviews数据 由于返回的数据为JSON格式 很好分析 判定是否爬完酒店评论 直接获取评论数目 想要通
  • Dorado下拉框多选(ListDropDown)

    最终样式如下图 这里是通过ListDropDown下拉框做出的效果 1 在ListDropDown的Entity属性添加下拉内容 并且设置红色框的属性为false 该控件的onClose事件 var value arg selectedVa
  • ESP32-C3 学习测试 蓝牙 篇(四、GATT Server 示例解析)

    了解了蓝牙 GATT 相关概念 趁热打铁 分析一下官方示例 GATT Server 的应用程序架构 目录 前言 一 GATT Server 示例分析 1 1 初始化 1 2 回调函数 gatts event handler gap even
  • 软件技术基础知识忏悔录C#&.NET篇(一)

    为何开始 人已是大三之年 虽是身在985 心里却没有半分985的底气 自从大二分流以来 自己几乎是没再系统的学过什么 除了几位知识还算渊博的老师教了较为详细的数据库 数据结构的知识之外 其他老师大抵都是迷迷糊糊的念些大家都知道的大条话 然后
  • 开源许可协议:GPL、LGPL、AGPL、MPL和BSD、MIT、Apache

    概述 一 开源许可证的分类 开源许可证分为2种类型 宽松型和著作权型 1 宽松型 Permissive 该类许可证往往只要求被许可方保留原作品的版权信息 对用户施加的限制较少 衍生软件可以成为私有软件 如Apache MIT BSD系列许可
  • 基于Session实现登录流程

    流程一 发送短信验证码 用户在提交手机号后 会校验手机号是否合法 如果不合法 则要求用户重新输入手机号 如果手机号合法 后台此时生成手机号对应的验证码 后台先得到验证码 同时将验证码保存到session中 然后再通过短信的方式 测试中输出到