【代码解析】代码解析之登录(1)

代码:

@Override
    public UserDTO login(UserDTO userDTO) {
        // 用户密码 md5加密
        userDTO.setPassword(SecureUtil.md5(userDTO.getPassword()));
        User one = getUserInfo(userDTO);
        if (one != null) {
            BeanUtil.copyProperties(one, userDTO, true);
            he.userId=one.getId();
            System.err.println(one.getId());
            // 设置token
            String token = TokenUtils.genToken(one.getId().toString(), one.getPassword());
            userDTO.setToken(token);
            String role = one.getRole(); // ROLE_ADMIN
            // 设置用户的菜单列表
            List<Menu> roleMenus = getRoleMenus(role);
            userDTO.setMenus(roleMenus);
            return userDTO;
        } else {
            throw new ServiceException(Constants.CODE_600, "用户名或密码错误");
        }
    }

这是一段处理用户逻辑的登录代码

1.

public UserDTO login(UserDTO userDTO) {

定义了一个名为 login 的公共方法,它接收一个 UserDTO 类型的参数,并返回一个UserDTO的结果。

2.
        userDTO.setPassword(SecureUtil.md5(userDTO.getPassword()));

这行代码的意思是将用户输入的密码进行md5加密,然后存回userDTO对象中

3.

 User one = getUserInfo(userDTO);

调用 getUserInfo 的方法,来获取与输入的userDTO 匹配的用户信息,并将结果存储在 one 变量中

4.

   if (one != null) {

检查上一步获取的信息是否为空

5.

BeanUtil.copyProperties(one, userDTO, true);

如果用户信息不为空,调用 BeanUtil 类的 copyProperties方法,将用户的信息复制回 userDTO 对象中

6. 

he.userId=one.getId();

设置he.userId的为用户对象的id ,  这里的he需要联系上下文,这里没有给出he的来源

7.
    System.err.println(one.getId());

 在控制台输出用户的ID      

8. 
  String token = TokenUtils.genToken(one.getId().toString(), one.getPassword());           

生成一个token,这里使用用户的 id 和密码作为参数     

gentoken 方法如下:

https://blog.csdn.net/m0_67930426/article/details/135328889?spm=1001.2014.3001.5502 

9.   

  userDTO.setToken(token);

将生成的 token 设置到 userDTO 的对象中

10.
     
String role = one.getRole();   

获取用户的角色     

这里获取用户的角色,如果获取到的角色是用户,登录的时候进入到用户的菜单列表,如果是管理员,登录的时候进入管理员的菜单列表。 

 11.
      List<Menu> roleMenus = getRoleMenus(role);

调用 getRoleMenus 方法来获取与用户角色匹配的菜单表,并将结果存储到 roleMenus 的变量中。

 

12.
          userDTO.setMenus(roleMenus);  

将获取的菜单列表设置到 UserDTO的对象中

13.

      return userDTO;     

返回处理后的userDTO对象

14.

以上用户信息存在的情况

        } else {

以下是用户信息不存在的情况

15.

throw new ServiceException(Constants.CODE_600, "用户名或密码错误");
   

如果用户信息不存在,则抛出一个服务异常,表示用户名或密码错误

  

            
        }
    }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

地下城游戏(dp问题)

1.状态表示 2.状态转移方程 3.初始化 4.填表顺序 从下往上填&#xff0c;每一行&#xff0c;每一行从右往左 5.返回值 dp[0][0]

Java学习路线第五篇:微服务框架(1)

这篇则分享Java学习路线第五part&#xff1a;微服务框架 恭喜你已经成功追到第五章节啦&#xff0c;要被自己的努力感动到了吧&#xff0c;而这节将承担起学完微服务架构的使命&#xff0c;本使命为单向契约&#xff0c;你可选择YES或者选择YES。 SpringBoot2 动力节点一课搞…

印象笔记01:初识印象笔记

印象笔记01&#xff1a;初识印象笔记 印象笔记是一个历史比较久的笔记软件&#xff0c;近几年营销渠道不断完善&#xff0c;软件生态也日渐健全。个人因为很早接触印象笔记&#xff0c;从有道云笔记转粉到印象笔记了&#xff08;2017 年&#xff09;。而且在前几年一下子开了十…

2023-12-16 LeetCode每日一题(统计区间中的整数数目)

2023-12-16每日一题 一、题目编号 2276. 统计区间中的整数数目二、题目链接 点击跳转到题目位置 三、题目描述 给你区间的 空 集&#xff0c;请你设计并实现满足要求的数据结构&#xff1a; **新增&#xff1a;**添加一个区间到这个区间集合中。 **统计&#xff1a;**计算…

基础算法(7):离散化和区间合并

1.离散化 离散化是一个很好用的技巧&#xff0c;可以很大程度上降低时间和空间复杂度 离散化是把无限空间中有限的个体映射到有限的空间中去&#xff0c;减少空间的使用。 比如&#xff1a;我们有一组很大的数据 &#xff1a;1 3 277438 2884821 428 239823128 如果我们…

mysql的索引原理

目录 一、索引采用B树的优势二、为什么不使用其他数据结构2.1、哈希索引2.2平衡二叉树B树 参考 mysql索引采用B树 一、索引采用B树的优势 1可以进行范围查找&#xff0c;通过单向链表解决&#xff08;通过单向链表已经排好序&#xff09;。 2非叶子结点只存储key&#xff0c;不…

《网络是怎样连接的》2.1节图表(自用)

图3.1&#xff1a;协议栈的组成 图3.2&#xff1a;netstat命令查看套接字 上图中每一行就是一个套接字 图3.3&#xff1a;协议栈在浏览器访问DNS服务器与web服务器时的具体工作流程 套接字由协议栈创建 应用程序通过Socket库中的程序组件与协议栈交互

小梅哥Xilinx FPGA学习笔记16——FSM(状态机)的学习

目录 一、 状态机导读 1.1 理论学习 1.2 状态机的表示 1.3 状态机编码 1.4 状态机描述方式 二 、实战演练一&#xff08;来自野火&#xff09; 2.1 实验目标 2.2 模块框图 2.3 状态转移图绘制 2.4 设计文件 2.5 仿真测试文件 2.6 仿真结果 三、 实战演练二&…

(C++) 拷贝构造函数

目录 一、基本介绍 二、为什么需要拷贝构造函数 三、拷贝构造函数 四、传参时的问题 五、完整代码 一、基本介绍 拷贝构造函数是C中一个特殊的构造函数&#xff0c;用于创建一个类的对象作为另一个同类对象的副本。当一个对象以值的形式被传递给函数、从函数返回&#xff0…

计算机网络第一课

先了解层级&#xff1a; 传输的信息称为协议数据单元&#xff08;PDU&#xff09;&#xff0c;PDU在每个层次的称呼都不同&#xff0c;见下图&#xff1a;

(1)(1.13) SiK无线电高级配置(一)

文章目录 前言 1 监控链接质量 2 诊断范围问题 前言 本文提供 SiK 遥测无线电(SiK Telemetry Radio)的高级配置信息。它面向"高级用户"和希望更好地了解无线电如何运行的用户。 &#xff01;Tip 大多数用户只需要 SiK Radio v2 中提供的基本指南和功能概述。 1 …

提前应对威胁

通过新的《2023-2028 年荷兰国际网络安全战略》&#xff0c;荷兰政府在面对国家和犯罪分子持续构成的网络威胁时展现了责任和机构。它渴望将民主、人权和规范放在首位&#xff0c;并寻求维护全球开放、自由和安全的互联网。该战略明确了政府在国内实施打击的意愿和能力&#xf…

Revit各版本安装指南

Revit下载链接 https://pan.baidu.com/s/1dVqJhV07emS-p-zIxTG7kw?pwd0531 1.鼠标右击【Revit2024(64bit)】压缩包&#xff08;win11及以上系统需先点击“显示更多选项”&#xff09;【解压到 Revit2024(64bit)】。 2.打开解压后的文件夹&#xff0c;双击打开【Setup】文件夹…

数据库开发之子查询的详细解析

1.4 子查询 1.4.1 介绍 SQL语句中嵌套select语句&#xff0c;称为嵌套查询&#xff0c;又称子查询。 SELECT * FROM t1 WHERE column1 ( SELECT column1 FROM t2 ... ); 子查询外部的语句可以是insert / update / delete / select 的任何一个&#xff0c;最常见…

论文速递|Management Science 11月文章合集(下)

添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 编者按 在本系列文章中&#xff0c;我们梳理了运筹学顶刊Management Science11月份发布的47篇文章的基本信息&#xff0c;旨在帮助读者快速洞察行业最新动态。本文为第三部分。 文章1 ● 题目&#xff1a;…

软件测试/测试开发丨Linux 三剑客与管道使用

1、 程序运行环境输入与输出 标准输入 0 read a;echo $a标准输出 1 echo ceshiren.com错误输出 ls not_exist_dir 2、 管道重定向 管道与管道之间可以重定向管道与文件之间可以重定向 echo 11 > /tmp/1 read var </tmp/1错误输出&#xff1a; ls not_exist_dir > /…

Python实现【亚马逊商品】数据采集

前言 亚马逊公司&#xff0c;是美国最大的一家网络电子商务公司&#xff0c;位于华盛顿州的西雅图 是网络上最早开始经营电子商务的公司之一&#xff0c;亚马逊成立于1994年 今天教大家用Python批量采集亚马逊平台商品数据&#xff08;完整代码放在文末&#xff09; 地址&#…

《数据库开发实践》之触发器【知识点罗列+例题演练】

一、什么是触发器&#xff1f; 1.概念&#xff1a; 简单来说触发器就是一种特殊的存储过程&#xff0c;在数据库服务器触发事件的时候会自动执行其SQL语句集。 2.构成四要素&#xff1a; &#xff08;1&#xff09;名称&#xff1a;要符合标识符命名规则 &#xff08;2&am…

在线课程学习管理

### 起步1. 使用 IDEA 导入项目 2. 执行 sql 目录下的online_study_system.sql 文件 3. 修改 mysql.properties 中数据库连接信息 4. 运行程序| 用户名| 密码 | | ------------- |:-------------| | admin | 123 | | 李老师 | 123 | | 张老师 | 123 | | 刘老师 | 123 | | 曹老师…

【Redis技术专区】「原理分析」探讨Redis6.0为何需要启用多线程

探讨Redis 6.0为何需要启用多线程 背景介绍开启多线程多线程的CPU核心配置IO多线程模式单线程处理方式多线程处理方式 为什么要开启多线程&#xff1f;充分利用多核CPU提高网络I/O效率响应现代应用需求 多线程实现启用多线程 最后总结 背景介绍 在Redis 6.0版本中&#xff0c;…