golang通用后台管理系统03(登录校验,并生成token)

代码

package serviceimport ("fmt"//"fmt""gin/common""gin/config"sysEntity "gin/system/entity"sysUtil "gin/system/util""github.com/gin-gonic/gin""log"
)func Login(c *gin.Context, loginBody *sysEntity.LoginBody) map[string]string {var resultList []map[string]interface{}var resultTokenList = make(map[string]string)//参数接收userName := loginBody.UserNamepassword := loginBody.Password//不为空校验传参if userName == "" {common.ReturnError(c, 500, sysUtil.MapToJson("用户名不能为空"), resultList, int64(len(resultList)))panic("")}if password == "" {common.ReturnError(c, 500, sysUtil.MapToJson("密码不能为空"), resultList, int64(len(resultList)))panic("")}log.Println("用户输入的账号:" + userName)log.Println("用户输入的密码:" + password)//TODO 校验数据库中的  用户信息//从数据库中查询输入用户的信息sysUser := &sysEntity.LoginBody{}//取值 赋值sysUser.UserName = userName//查收过滤条件拼装//查询多条记录,Find函数返回的是一个数组err := config.GormDb.Model(&sysEntity.LoginBody{}).Table("sys_user ").Select("user_id as UserId", "user_name as UserName", "password as Password", "dept_id as DeptId").Where("LOWER(user_name) = LOWER(?)", userName).Scan(&resultList).Errorif err != nil {log.Println("查询用户失败,原因:", err)//panic("用户查询失败")}if resultList == nil {log.Println("查询用户失败,原因:数据库中没有查到   userName 叫 admin 的用户信息")common.ReturnError(c, 500, sysUtil.MapToJson("查询用户失败,原因:数据库中没有查到   userName 叫 admin 的用户信息"), resultList, int64(len(resultList)))panic("")}//数据库中有数据进行后面操作userNameDB := ""passwordDB := ""deptIdDB := 0if len(resultList) > 0 {log.Println("用户信息查询成功!!!!!,进行后续操作")for _, item := range resultList {// 将集合中的值赋值给sysUser结构体的对应字段userNameDB = item["UserName"].(string)passwordDB = item["Password"].(string)//deptIdDB = item["DeptId"].(int)log.Println("数据库中的密码密文为:" + userNameDB + "=====" + passwordDB)}}//rsa解密 数据库中用户的密文密码plainText := []byte(passwordDB)plainText, err = sysUtil.RsaDecrypt(plainText, "./private.pem")if err != nil {log.Println("==================解密发生异常")fmt.Println(err)}fmt.Printf("数据库密码解密后的明文为:%s\n", plainText)log.Println("====================用户输入的明文密码为:" + password)log.Println("====================数据库中查找到的密码解密后为:" + string(plainText))//数据库中的密码密文  解密后,与用户输入的  明文密码 进行比较if string(plainText) == password {log.Println("************************您输入的密码正确,密码校验通过!!!********************************")} else {log.Println("************************您输入的密码错误,密码校验不通过!!!********************************")common.ReturnError(c, 500, sysUtil.MapToJson("登录失败,用户密码错误,请仔细检查"), resultList, int64(len(resultList)))panic("")}//TODO 创建令牌sysUserEntity := &sysEntity.SysUserEntity{}sysUserEntity.UserName = userNamesysUserEntity.DeptId = deptIdDBsysUserEntity.Password = string(plainText)//TODOtoken := CreateToken(c, userName, sysUserEntity)log.Println("111111111111111111111111111111111111111111111111111----token生成结束, TIKEN:" + token)resultTokenList["token"] = tokenreturn resultTokenList
}//RSA加密解密测试验证
func Rsapassword(c *gin.Context, loginBody *sysEntity.LoginBody) []map[string]interface{} {var resultList []map[string]interface{}//参数接收//userName := loginBody.UserName//password := loginBody.Password//生成密钥对err := sysUtil.GenerateRsaKey(1024, "./")if err != nil {log.Println("==================生成密钥对发生异常")fmt.Println(err)}//加密plainText := []byte("123456")cipherText, err := sysUtil.RsaEncrypt(plainText, "./public.pem")if err != nil {fmt.Println(err)log.Println("==================加密发生异常")}fmt.Printf("加密后为:%s\n", cipherText)//解密plainText, err = sysUtil.RsaDecrypt(cipherText, "./private.pem")if err != nil {log.Println("==================解密发生异常")fmt.Println(err)}fmt.Printf("解密后为:%s\n", plainText)return resultList
}

2.

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

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

相关文章

Java环境下配置环境(jar包)并连接mysql数据库

目录 jar包下载 配置 简单连接数据库 一、注册驱动(jdk6以后会自动注册) 二、连接对应的数据库 以前学习数据库就只是操作数据库,根本不知道该怎么和软件交互,将存储的数据读到软件中去,最近学习了Java连接数据库…

快速遍历包含合并单元格的Word表格

Word中的合并表格如下,现在需要根据子类(例如:果汁)查找对应的品类,如果这是Excel表格,那么即使包含合并单元格,也很容易处理,但是使用Word VBA进行查找,就需要一些技巧。…

「C/C++」C/C++标准库 之 #include<ctime> 时间日期库

✨博客主页何曾参静谧的博客📌文章专栏「C/C」C/C程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…

使用wordcloud与jieba库制作词云图

目录 一、WordCloud库 例子: 结果: 二、Jieba库 两个基本方法 jieba.cut() jieba.cut_for_serch() 关键字提取: jieba.analyse包 extract_tags() 一、WordCloud库 词云图,以视觉效果提现关键词,可以过滤文本…

深入解析缓存模式下的数据一致性问题

今天,我们来聊聊常见的缓存模式和数据一致性问题。 常见的缓存模式有:Cache Aside、Read Through、Write Through、Write Back、Refresh Ahead、Singleflight。 缓存模式 Cache Aside 在 Cache Aside 模式中,是把缓存当做一个独立的数据源…

ffmpeg视频滤镜:膨胀操作-dilation

滤镜介绍 dilation 官网链接 > FFmpeg Filters Documentation 膨胀滤镜会使图片变的更亮,会让细节别的更明显。膨胀也是形态学中的一种操作,在opencv中也有响应的算子。此外膨胀结合此前腐蚀操作,可以构成开闭操作。 开操作是先腐蚀…

多线程和线程同步基础篇学习笔记(Linux)

大丙老师教学视频:10-线程死锁_哔哩哔哩_bilibili 目录 大丙老师教学视频:10-线程死锁_哔哩哔哩_bilibili 线程概念 为什么要有线程 线程和进程的区别 在处理多任务的时候为什么线程数量不是越多越好? Linux提供的线程API 主要接口 线程创建 pth…

jeecgbootvue2菜单路由配置静态文件夹(public)下的html

需求:想要在菜单配置src/assets/iconfont/chart.html显示页面(目的是打包上线以后运维依然可以修改数据) 官网没有相关数据:菜单配置说明 JeecgBoot 开发文档 看云 问题现象: 我把文件放在src/assets/iconfont/chart.html然后在vue中作为 iframe 的 src 属性&am…

3种AI黑科技,让照片中的人物开口说话的简易方法,快进来学!

本文背景 用AI工作这么久了,我经常碰到各种关于AI的问题,比如制作让照片中人物开口说话的数字人。 很多小伙伴想知道是怎么弄的,不知从何下手。不过不用担心,今天就给大家带来三种实用的方法,快来一起试试吧。 首先是腾…

【docker compose】docker compose的hello world

安装docker desktop后在终端使用以下命令,代表安装成功,并查看当前安装的版本 docker-compose --version示例docker-compose.yml文件 version: 3.8 # 指定 Docker Compose 文件的版本services:scau_jwc: # 定义一个名为 scau_jwc 的服务image: scau_…

【js逆向学习】某多多anti_content逆向(补环境)

文章目录 声明逆向目标逆向分析逆向过程总结 声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的…

【C++】动态内存

一、内存区域分布 首先我们来看一段代码并尝试解决以下问题: 1. GlobalVar是全局变量,存储在数据段(静态区),选C。2. staticGlobalVar是静态全局变量,也存储在数据段(静态区)&#x…

基于STM32的温湿度监测器教学

引言 随着科技的发展,温湿度监测在农业、仓储、环境监测等领域的应用越来越广泛。本文将指导您如何基于STM32开发一个简单的温湿度监测器,使用常用的DHT11或DHT22传感器进行数据采集,并将监测结果显示在LCD或OLED屏幕上。 项目名称 STM32温湿…

哈希表,哈希桶及配套习题

我们今天带大家简单了解哈希表是怎样的,和简单模拟哈希桶,还有几道练习题 一,哈希表 什么是哈希表,哈希表是一种非常非常高效的数据结构,它用来搜索我们想要的数据,我们之前学过很多查找方法,最…

二百七十四、Kettle——ClickHouse中对错误数据表中进行数据修复(实时)

一、目的 在完成数据清洗、错误数据之后,需要根据修复规则对错误数据进行修复 二、Hive中原有代码 insert into table hurys_db.dwd_queue partition(day) selecta3.id,a3.device_no,a3.source_device_type,a3.sn,a3.model,a3.create_time,a3.lane_no,a3.lane_…

Golang | Leetcode Golang题解之第530题二叉搜索树的最小绝对差

题目&#xff1a; 题解&#xff1a; func getMinimumDifference(root *TreeNode) int {ans, pre : math.MaxInt64, -1var dfs func(*TreeNode)dfs func(node *TreeNode) {if node nil {return}dfs(node.Left)if pre ! -1 && node.Val-pre < ans {ans node.Val -…

Android Studio打包时不显示“Generate Signed APK”提示信息

Android Studio打包时&#xff0c;默认显示“Generate Signed APK”提示信息&#xff0c;如下图所示&#xff1a; 如果在打包时不显示“Generate Signed APK”提示信息&#xff0c;解决办法是&#xff1a; Android Studio菜单栏&#xff0c;“File->Settings->Appearan…

手游和应用出海资讯:可灵AI独立APP即将上架;Rollic在英国推出芭比合并解谜手游

NetMarvel帮助游戏和应用广告主洞察全球市场、获取行业信息&#xff0c;以下为10月第四周资讯&#xff1a; ● 苹果开发全新游戏中心应用 ● Meta计划开发人工智能搜索引擎 ● 微软已拥有20个游戏IP&#xff0c;收入达10亿美元 ● OpenAI计划在12月推出其下一代前沿模型Orion ●…

js中多let与var

在 JavaScript 中&#xff0c;let 和 var 都用于声明变量&#xff0c;但它们有一些关键的区别。主要区别包括作用域、变量提升、可重复声明、以及在全局作用域中的行为。 1. 作用域&#xff08;Scope&#xff09; let&#xff1a;块级作用域。用 let 声明的变量只在其所在的代…

qt管理系统框架(好看界面、漂亮界面、好看的界面、漂亮的界面)

概述 最近一个项目用QT开发&#xff0c;然后找了美工帮设计了下界面。总算完工&#xff0c;后想一下干脆抽出一个基础框架&#xff0c;方便以后用。 功能 支持mysql、echarts。 支持加载动态权限菜单&#xff0c;轻松权限控制。 支持遮罩对话框、抽屉 支持开机启动动画界面 内…