单点登录分析介绍

news2025/1/10 11:46:26

文章目录

  • 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

    @Override
    public 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.coloradmin.cn/o/1820542.html

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

相关文章

WordPress、Typecho 站点如何让 CloudFlare 缓存加速

众所周知 WordPress、Typecho 都是著名动态博客站点(一个最简单的判断依据就是都要依赖结合数据库),这类站点在 CDN 缓存上都有一个致命的缓存弊端就是动静态请求的区分,理论上要让 CDN 绕过所有的动态请求,缓存所有的静态请求,否则就会造成前端登录和非登录状态的混乱,…

聊聊分布式集群的基本概念

在当前主流的分布式架构中,各种各样的集群技术几乎成了任何想要提升系统稳定性和处理能力的团队的必备技能。虽然各种中间件和系统都有让人看似眼花缭乱的集群实现方案,但其背后仍然逃不过一些核心的技术概念,我会结合几个我比较熟悉的中间件…

java.nio.charset.UnmappableCharacterException

问题 java.lang.IllegalArgumentException: java.nio.charset.UnmappableCharacterException: Input length 1 解释为编码转换有问题 问题错在位置 非汉字存在 打包的时候就会报异常

怎么把wma格式转化为mp3格式?四种wma格式转成MP3格式的方法

怎么把wma格式转化为mp3格式?转换WMA格式音频文件为MP3格式是一个常见的需求,尤其是在我们希望在不同设备或平台上播放音频时。WMA格式虽然在Windows系统中较为常见,但在其他平台上的兼容性可能不如MP3格式。因此,将WMA转换为MP3是…

c#引用dll报错cs8370功能“本地函数特性“在c#7.3中不可用

cs8370:功能"本地函数特性"在c#7.3中不可用 解决方法: 代码放在form类里面

YOLOv5改进 | Head | 将yolov5的检测头替换为ASFF_Detect

💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 在目标检测中,为了解决尺度变化的问题,通常采用金字塔特征表示。然而,对于基于特征金字塔的单次检测器来…

NestJS学习笔记

一、安装NestJS CLI工具 环境检查 //查看node版本 node -v//查看npm版本 npm -v 安装nest/cli 使用npm全局安装nestjs/cli npm i -g nestjs/cli 查看nest版本 nest -v 结果如图: 创建nest项目 //命令行创建nest项目 nest new 【项目名】 VScode扩展下载 1、…

体验版小程序访问不到后端接口请求失败问题解决方案

文章目录 解决方案一:配置合法域名解决方案二:开发调试模式第一步:进入开发调试模式第二步:启用开发调试 注意事项结语 🎉欢迎来到Java面试技巧专栏~探索Java中的静态变量与实例变量 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&…

银行业信息技术外包(ITO)深度解析:现状、挑战、业务分类与协同策略

一、引言 最近有朋友在咨询关于银行业信息技术外包(ITO)这块业务,同时也在网上看到了关于银行业信息技术外包(ITO)的相关信息,今天正好有时间,通过采集的相关信息结合自己的相关工作接触到的相关…

推挽与开漏输出

一般来说,微控制器的引脚都会有一个驱动电路,可以配置不同类型的数字和模拟电路接口。输出模式一般会有推挽与开漏输出。 推挽输出 推挽输出(Push-Pull Output),故名思意能输出两种电平,一种是推&#xf…

STM32开发过程中碰到的问题总结 - 1

文章目录 前言1. 怎么生成keil下可以使用的文件和gcc下编译使用的makefile2. STM32的时钟树3.怎么查看keil5下的编译工具链用的是哪个4. Arm编译工具链和GCC编译工具链有什么区别吗?5. 怎么查看Linux虚拟机是x86的还是aarch646. 怎么下载gcc-arm的编译工具链7.怎么修…

JavaScript的数组排序

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

css设置滚动条样式;滚动条设置透明

滚动条透明代码 .resizable-div {resize: both;/* 允许水平和垂直调整大小 */overflow: auto;/* 确保内容超出边界时出现滚动条 */ } /* 滚动条整体样式 */ .resizable-div::-webkit-scrollbar {width: 4px; /* 竖直滚动条宽度 */height: 4px; /* 水平滚动条高度 */ }/* 滚动条…

使用uniapp设置tabbar的角标和移除tabbar的角标

使用场景描述 在一进入到小程序的时候就要将用户在购物车中添加的商品总数&#xff0c;要以角标的形式显示在tababr中。 代码实现 //index.vue<script setup> import { onLoad } from dcloudio/uni-apponLoad(()>{uni.setTabBarBadge({index: 1,text: 5 //为了实现…

VBA实现关闭Excel自动计算,关闭屏幕刷新

Excel代码提速神器 涉及到提取表格大量数据操作&#xff0c;复制粘贴多个单元格时&#xff0c;尽量避免一个个单元格提取&#xff0c;或者一行行一列列提取数值&#xff0c;设计大量IO流操作非常浪费时间。尽量找出数据之间的规律&#xff0c;批量选中复制粘贴&#xff0c;找到…

【大数据】Spark使用大全:下载安装、RDD操作、JAVA编程、SQL

目录 前言 1.下载安装 2.RDD操作 3.JAVA编程示例 4.Spark SQL 前言 本文是作者大数据系列中的一文&#xff0c;专栏地址&#xff1a; https://blog.csdn.net/joker_zjn/category_12631789.html?spm1001.2014.3001.5482 该系列会成体系的聊一聊整个大数据的技术栈&…

P3388 【模板】割点(割顶)

题目背景 割点 题目描述 给出一个 n 个点&#xff0c;m 条边的无向图&#xff0c;求图的割点。 输入格式 第一行输入两个正整数 n,m。 下面 m 行每行输入两个正整数 x,y 表示 x 到 y 有一条边。 输出格式 第一行输出割点个数。 第二行按照节点编号从小到大输出节点&am…

实验五 网络中的树

文章目录 5.1 网络中的树第一关 认识树相关知识编程要求代码文件 第2关 根节点的二阶邻居求解方法相关知识编程要求代码文件 第3关 根节点的n阶邻居求解方法相关知识 5.2 权值矩阵与环&#xff08;无向网络&#xff09;第1关 无向网络的权值矩阵相关知识编程要求代码文件 第2关…

CrossOver 2024软件下载-CrossOver 2024详细安装教程

Crossover软件是一款可以在Mac、Linux和Chromebook上运行Windows程序的软件。 它是一款商业软件&#xff0c;由CodeWeavers公司开发&#xff0c;Crossover不是一个虚拟机或模拟器&#xff0c;它使用Wine技术来将Windows程序直接转换成可以在其他操作系统上运行的程序&#xff0…

基于SpringBoot3+Vue3宠物小程序宠物医院小程序的设计与实现

大家好&#xff0c;我是程序员小孟。 最近开发了一个宠物的小程序&#xff0c;含有详细的文档、源码、项目非常的不错&#xff01; 一&#xff0c;系统的技术栈 二&#xff0c;项目的部署教程 前端部署包&#xff1a;npm i 启动程序&#xff1a;npm run dev 注意事项&…