单点登录分析介绍

文章目录

  • 1、单点登录解决方案
    • 1.1、后端保存登录状态
    • 1.2、token模式
  • 2、user服务-登录接口
    • 2.1、UserController
    • 2.2、UserInfoServiceImpl
    • 2.3、载荷
    • 2.4、响应
    • 2.5、Redis Desktop Manager

1、单点登录解决方案

  • 多个系统只有一个登录服务

1.1、后端保存登录状态

在这里插入图片描述

1.2、token模式

在这里插入图片描述

2、user服务-登录接口

2.1、UserController

	@Operation( summary = "用户登录接口")@PostMapping("/login")public Result login(@RequestBody UserInfo userInfo) {String token = userInfoService.login(userInfo);return Result.ok(token);}

2.2、UserInfoServiceImpl

    @Overridepublic String login(UserInfo userInfo) {//1、校验参数String username = userInfo.getUsername();String password = userInfo.getPassword();if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password)) {throw new SpzxException(ResultCodeEnum.LOGIN_PARAMS_ERROR, null);}//2、根据账号查询用户信息UserInfo dbUserInfo = this.getOne(Wrappers.lambdaQuery(UserInfo.class).eq(UserInfo::getUsername, username));if (dbUserInfo == null) {throw new SpzxException(ResultCodeEnum.LOGIN_USERNAME_ERROR, null);}//判断用户状态,用户状态校验if (dbUserInfo.getStatus() != 1) {throw new SpzxException(ResultCodeEnum.LOGIN_USER_STATUS_ERROR, null);}//3、账号存在,校验密码//使用明文密码 和 盐 采用注册的加密方式加密 和数据库密文比较String encodePwd = DigestUtils.md5DigestAsHex((DigestUtils.md5DigestAsHex(password.getBytes()) + dbUserInfo.getSalt()).getBytes());if (!encodePwd.equals(dbUserInfo.getPassword())) {throw new SpzxException(ResultCodeEnum.LOGIN_PASSWORD_ERROR, null);}//密码正确//4、生成token 缓存到redis中String token = IdUtil.getSnowflake(1, 1).nextIdStr();// 将用户密码重置为null,表示清除密码信息dbUserInfo.setPassword(null);// 将用户盐值重置为null,配合密码重置,确保安全性和一致性dbUserInfo.setSalt(null);redisTemplate.opsForValue().set("spzx:user:login:" + token, dbUserInfo, 7, TimeUnit.DAYS);//登录成功:更新用户最后一次登录的时间 和 ip地址ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request = requestAttributes.getRequest();return token;}

2.3、载荷

{"username": "18947628476","password": "123456"
}

2.4、响应

{"code":200,"message":"SUCCESS","data":"1801188891328385024"}

在这里插入图片描述

2.5、Redis Desktop Manager

{"@class": "com.atguigu.spzx.model.entity.h5.UserInfo","id": 1774759294596579329,"createTime": ["java.util.Date","2024-04-01 19:22:44"],"updateTime": ["java.util.Date",1718243055000],"deleted": false,"username": "18947628476","password": null,"nickName": "小弟","avatar": "https://cdn.apifox.com/app/project-icon/builtin/16.jpg","sex": null,"phone": null,"memo": null,"openId": null,"unionId": null,"lastLoginIp": null,"lastLoginTime": null,"status": 1,"salt": null
}

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

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

相关文章

pdf书签怎么做?这三款软件轻松驾驭文档!

在数字化时代,PDF文件已成为我们工作、学习中的重要组成部分。然而,面对海量的PDF内容,如何快速定位关键信息,提高阅读效率呢?答案就是——制作PDF书签。今天,我将为大家介绍三款实用的软件,助你…

LangChain 与 Elastic 合作为 RAG 添加向量数据库和语义重排序

作者:来自 Elastic Max Jakob 在过去的一年中,我们看到了生成式人工智能领域的许多进展。许多新服务和库应运而生。LangChain 已成为使用大型语言模型 (LLM) 构建应用程序的最受欢迎的库,例如检索增强生成 (RAG) 系统。该库使原型设计和试验不…

大数据学习——安装hive

一. 安装准备 1. 打开虚拟机,启动配置了NameNode节点的虚拟机(一般和mysql在同一台虚拟机)并连接shell 二. 安装 1. 上传hive安装包 hive安装包 提取码:6666 切换到/opt/install_packages目录下 可以将之前解压的rpm文件删除…

C语言调用so/dll动态库

文章目录 windows系统linux系统windows 与 linux下 C 调用动态库的差异 C语言调用动态链接库 windows系统 windows系统下&#xff0c;C语言调用win下的动态库dll&#xff0c;使用头文件<windows.h>。 准备基础C代码 lauf.c #include <stdio.h>// 定义函数&#x…

算法课程笔记——线段树维护矩阵

算法课程笔记——线段树维护矩阵 2

前后端知识点汇总

springboot项目启动 springboot集成naocs和redis springboot集成mybatis springboot集成mybatisPlus 集成rabbitMq 集成sa-token satoken介绍 sa-token官网Sa-Token 是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会…

【stm32】基于I2C协议的OLED显示(利用U82G库)

【stm32】基于I2C协议的OLED显示&#xff08;利用U82G库&#xff09; 一、实验目的二、探究任务三、原理探究3.1 I2C接口3.1.1 概述3.1.2 主要特点3.1.3 功能描述3.1.4 从模式3.1.5 主模式3.1.6 时序协议 3.2 OLED屏3.2.1 工作原理3.2.2 汉字点阵显示原理3.2.3 汉字点阵取模 四…

【后端开发】服务开发场景之高性能(CDN与负载均衡,数据库优化,消息队列)

【后端开发】服务开发场景之高性能&#xff08;CDN与负载均衡&#xff0c;数据库优化&#xff0c;消息队列&#xff09; 文章目录 1、内容分发网络&#xff08;CDN &#xff09; & 负载均衡算法CDN是什么&#xff1f;&#xff08;静态资源加速&#xff09;CDN的应用场景&am…

OV5647与树莓派bullseye 64bit的兼容性问题

OV5647与树莓派bullseye 64bit的兼容性问题 1. 源由2. 问题3. 分析方法一&#xff1a;使用 pyudev 库方法二&#xff1a;使用 v4l2-ctl 工具方法三&#xff1a;直接读取 /dev 目录方法四&#xff1a;使用 OpenCV方法五&#xff1a;使用 Picamera方法六&#xff1a;使用 libcame…

『原型资源』Axure自带图标库不够用,第三方经典图标库来袭

​今天小编为大家带来第三方经典图标库&#xff0c;己确认内容可用现推荐给大家。直接上手就可不用自己画哈~ 获取原型文档请与班主任联系&#xff01; 先睹为快&#xff0c;合适再拿走不谢&#xff1a; 图标太多&#xff0c;截取部分给大家参考o(*&#xffe3;︶&#xffe3;*…

Java最新面试题(全网最全、最细、附答案)

一、Java基础 1、基础概念与常识Java 语言有哪些特点? 简单易学&#xff08;语法简单&#xff0c;上手容易&#xff09;&#xff1b;面向对象&#xff08;封装&#xff0c;继承&#xff0c;多态&#xff09;&#xff1b;平台无关性&#xff08; Java 虚拟机实现平台无关性&a…

OCP学习笔记-007 SQL语言之二:DML

2. DML - Data Manipulation Language 数据操纵语句,用于添加、删除、更新和查询数据库记录,并检查数据完整性,常用的语句关键字主要包括insert、delete、udpate和select等。(增添改查) 事务:A transaction consists of a collection of DML statements that form a logi…

Vue 3获取DOM元素的大小以及相对于视口的位置的getBoundingClientRect属性

在Vue 3中&#xff0c;可以使用ref来获取DOM元素的getBoundingClientRect属性。 如果元素已挂载&#xff0c;我们使用 getBoundingClientRect 方法来获取元素的位置和大小信息。这个方法返回一个对象&#xff0c;其中包含了 left、top、right、bottom 等属性&#xff0c;这些属…

LVS负载均衡集群企业级应用实战-LVS/NAT模式(三)

目录 LVS/NAT模式 一. 环境准备 二. 对虚拟服务器操作 三. 对真实服务器操作 四. 打开网站验证 LVS/NAT模式 一. 环境准备 主机名主机IP模拟服务器系统用途localhost 10.36.178.156 192.168.226.137 虚拟服务器 Rocky_linux 客户兼负载均衡机分发IPlocalhost192.168.226…

关于Linux桌面系统的普及 这里是一些建议

Linux 桌面系统在普及方面面临一些挑战&#xff0c;尽管它在服务器和开发者社区中非常受欢迎。为了提高其普及率&#xff0c;可以从以下几个方面着手&#xff1a; 1. 改善用户体验 用户界面友好性&#xff1a;提升桌面环境的易用性和美观度&#xff0c;使其更符合普通用户的习…

记C#优化接口速度过程

前提摘要 首先这个项目是接手的前一任先写的项目&#xff0c;接手后&#xff0c;要求对项目一些速度相对较慢的接口进行优化&#xff0c;到第一个速度比较慢的接口后&#xff0c;发现单接口耗时4-8秒&#xff0c;是的&#xff0c;请求同一个接口&#xff0c;在参数不变的情况下…

【个人博客搭建】(24)统一api接口返回格式

统一接口的返回格式是为了方便开发的数据对接。 在现如今前后端分离的趋势下&#xff0c;需要对接各种类型的数据 所以&#xff0c;我们需要一个标准的数据格式。 1、定义数据格式&#xff1a;例如下边就是一个常见的格式 {"succeed":true,"code": 200,&q…

【算法——动态规划(从dfs回溯开始推导dp)】

基础理论 递归&#xff1a; 递&#xff1a;大问题分解子问题的过程 &#xff1b; 归&#xff1a;产生答案 dp&#xff1a;只进行归&#xff1b;用已知的最底层的&#xff08;递归的边界&#xff0c;搜索树的底&#xff09;&#xff0c;推出未知 《视频索引》 一句话&…

TDengine数据迁移

前言 taosdump 是一个支持从运行中的 TDengine 集群备份数据并将备份的数据恢复到相同或另一个运行中的 TDengine 集群中的工具应用程序。 taosdump 可以用数据库、超级表或普通表作为逻辑数据单元进行备份&#xff0c;也可以对数据库、超级 表和普通表中指定时间段内的数据记录…

蓝牙BLE上位机工具开发理论线索梳理_5.Windows WinRT API包Microsoft.Windows.SDK.Contracts

1. WinRT API包介绍 本文介绍下Windows WinRT API包&#xff08;Microsoft.Windows.SDK.Contracts&#xff09;&#xff0c; 如图1是SDK包的描述。 图1 Microsoft.Windows.SDK.Contracts Windows WinRT API包使您能够将最新的Windows运行时API支持添加到您的。net Framework 4.…