若依微服务登录密码加密传输解决方案
文章目录
- 一、需求提出
- 二、应用场景
- 三、解决思路
- 四、注意事项
- 五、完整代码
- 第一步:前端对密码进行加密
- 第二步:后端工具类实现 RSA 加解密功能
- 第三步:登录接口中添加解密逻辑
- 六、运行结果
- 总结
一、需求提出
在默认情况下,RuoYi 微服务框架的登录接口会通过明文传输密码,这可能导致安全性问题。如果项目对数据传输安全性有较高要求,可以通过配置加密传输方式来提升安全性。本文介绍一种基于 RSA 的解决方案。
二、应用场景
- 增强登录安全性:在密码传输过程中,防止数据被拦截导致的安全泄露。
- 符合安全合规要求:满足企业内部或行业标准对密码保护的要求。
- 敏感信息保护:保护用户的密码等敏感信息在网络传输过程中的隐私。
三、解决思路
- 前端加密:登录表单提交前,利用公钥对用户输入的密码进行加密。
- 后端解密:后端接收加密后的密码,利用私钥解密后继续进行用户身份验证。
- 统一加密工具:通过工具类封装加密和解密操作,便于维护和复用。
四、注意事项
- 公私钥生成:确保公钥和私钥的安全存储,避免密钥泄露。
- 加解密性能:RSA 加密存在一定性能消耗,建议合理优化前后端的加解密流程。
- 版本兼容性:确保前后端加密算法和密钥匹配,避免因版本问题导致数据解析失败。
五、完整代码
第一步:前端对密码进行加密
在前端项目的 login.js 文件中,修改登录方法,利用 RSA 公钥对密码加密。
// 导入加密工具
import { encrypt } from '@/utils/jsencrypt'// 登录方法
export function login(username, password, code, uuid) {// 使用公钥对密码加密password = encrypt(password); return request({url: '/auth/login',method: 'post',data: { username, password, code, uuid }});
}
说明:
- encrypt 方法需基于前端封装的 RSA 加密工具,使用后端提供的公钥进行加密。
- 前端仅需发送加密后的密码,后端会负责解密。
第二步:后端工具类实现 RSA 加解密功能
在后端 common 模块的 sign 包下新增工具类 RsaUtils.java,用于封装 RSA 加密解密逻辑。
package com.ruoyi.common.core.utils.sign;import org.apache.commons.codec.binary.Base64;
import javax.crypto.Cipher;
import java.security.*;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;/*** RSA 加密解密工具类* * @author ruoyi*/
public class RsaUtils {// RSA 私钥(用于解密)public static final String PRIVATE_KEY = "MIIBVAIBADANBgkqhki...";/*** 使用私钥解密数据** @param encryptedText 加密的文本* @return 解密后的文本* @throws Exception 解密失败抛出异常*/public static String decryptByPrivateKey(String encryptedText) throws Exception {PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(Base64.decodeBase64(PRIVATE_KEY));KeyFactory keyFactory = KeyFactory.getInstance("RSA");PrivateKey privateKey = keyFactory.generatePrivate(keySpec);Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.DECRYPT_MODE, privateKey);byte[] decryptedData = cipher.doFinal(Base64.decodeBase64(encryptedText));return new String(decryptedData);}
}
说明:
- 私钥安全性:务必妥善保管私钥,避免泄露。
- 加解密算法:工具类使用 RSA 算法,确保与前端加密逻辑一致。
第三步:登录接口中添加解密逻辑
修改 TokenController.java 的登录接口,添加对接收密码的解密操作。
@PostMapping("/login")
public R<?> login(@RequestBody LoginBody form) throws Exception {// 使用私钥解密密码String decryptedPassword = RsaUtils.decryptByPrivateKey(form.getPassword());// 验证用户登录LoginUser userInfo = sysLoginService.login(form.getUsername(), decryptedPassword);// 生成并返回 Tokenreturn R.ok(tokenService.createToken(userInfo));
}
说明:
- 解密后的明文密码传递给登录服务进行验证,逻辑与未加密传输时一致。
六、运行结果
- 用户访问登录页面,输入用户名和密码后,点击提交:
-
- 前端会对输入的密码进行 RSA 加密,后端接收到加密后的数据。
- 后端解密成功后,验证用户名和密码的有效性:
-
- 登录成功返回 Token,用户进入系统主页。
总结
通过前端加密与后端解密的配合,可以有效提升登录接口的安全性,避免密码明文传输可能带来的风险。这种方式简单实用,适用于需要保护用户敏感数据的场景。
相关文章:
若依微服务登录密码加密传输解决方案
文章目录 一、需求提出二、应用场景三、解决思路四、注意事项五、完整代码第一步:前端对密码进行加密第二步:后端工具类实现 RSA 加解密功能第三步:登录接口中添加解密逻辑 六、运行结果总结 一、需求提出 在默认情况下,RuoYi 微…...
NVR小程序接入平台/设备EasyNVR深度解析H.265与H.264编码视频接入的区别
随着科技的飞速发展和社会的不断进步,视频压缩编码技术已经成为视频传输和存储中不可或缺的一部分。在众多编码标准中,H.265和H.264是最为重要的两种。今天我们来将深入分析H.265与H.264编码的区别。 一、H.265与H.264编码的区别 1、比特率与分辨率 H.…...
Redisson常用方法
Redisson 参考: 原文链接 定义:Redisson 是一个用于与 Redis 进行交互的 Java 客户端库 优点:很多 1. 入门 1.1 安装 <!--redission--> <dependency><groupId>org.redisson</groupId><artifactId>redisson</artifa…...
html自带的input年月日(date) /时间(datetime-local)/星期(week)/月份(month)/时间(time)控件
年月日期控件 type"date" <input type"date" id"StartDate" valueDateTime.Now.ToString("yyyy-MM-dd") /> //设置值 $("#StartDate").val("2024-12-12"); //获取值 var StartDate$("#StartDate&quo…...
CSS系列(12)-- 响应式设计详解
前端技术探索系列:CSS 响应式设计详解 📱 致读者:掌握响应式设计的艺术 👋 前端开发者们, 今天我们将深入探讨 CSS 响应式设计,学习如何创建适应各种设备的网页布局。 响应式基础 🚀 视口设…...
filecoin boost GraphQL API 查询
查询示例 查询失败交易 curl -X POST \ -H "Content-Type: application/json" \ -d {"query":"query { deals(limit: 10, query: \"failed to get size of imported\") { deals { ID CreatedAt Message } } }"} \ http://localhost:…...
SAS - Subtractive Port
在SAS(串行连接SCSI,Serial Attached SCSI)协议中,subtractive port 是一种特殊类型的端口,主要用于设备间的路由功能。它的作用是在路径选择过程中充当默认路径,以处理未明确指定路径的请求。以下是它的定…...
TCP客户端模拟链接websocket服务端
因一些特殊原因研究了下TCP模拟链接websocket。原理上可以连接但具体怎么连接怎么操作就不知道了,需要研究下,以下是个人研究的方案。 用线上和本地地址来做例子: 线上wss地址:wss://server.cs.com/cs/vido/1 本地地址ws://127…...
TypeScript 的崛起:全面解析与深度洞察
一、背景与起源 (一)JavaScript 的局限性 类型系统缺失 难以在编码阶段发现类型相关错误,导致运行时错误频发。例如,将字符串误当作数字进行数学运算,可能在运行时才暴露问题。函数参数类型不明确,容易传入…...
c#笔记2024
Ctrl r e自动添加get和set CompositeCurve3d 复合曲线 List<Entity> entS listline.Cast<Entity>().ToList();//list类型强转 前面拼上\u0003,就可以实现,不管有没有命令都能打断当前命令的效果 取消其他命令:Z.doc.SendStri…...
Hadoop一课一得
Hadoop作为大数据时代的奠基技术之一,自问世以来就深刻改变了海量数据存储与处理的方式。本文将带您深入了解Hadoop,从其起源、核心架构、关键组件,到典型应用场景,并结合代码示例和图示,帮助您更好地掌握Hadoop的实战…...
AI生成图表化:深入探索Mermaid
引言 在使用生成式AI时,只要你提出让AI帮你生成mermaid图,AI的生成就会出现丰富的图形! 在现代文档编写中,图表的使用不仅能增强文档的可读性,还能更直观地表达复杂的概念和流程。Mermaid 作为一款开源的图表绘制工具…...
25.DDD数量关系
学习视频来源:DDD独家秘籍视频合集 https://space.bilibili.com/24690212/channel/collectiondetail?sid1940048&ctype0 文章目录 关系型数据库的数量关系领域模型的数量关系实现聚合数量关系聚合内聚合间具体说明代码 数量关系是本质吗?领域对象之…...
Linux应用开发————线程池
线程池 定义:简单来说,就是存放多个线程的池子。当创建线程池时,就给池中存放一些线程,如果有任务要执行,就从池中取出一个线程执行任务,依次类推;当所有线程都在执行任务时,其他任务…...
Spring Boot 集成阿里云OSS 完成文件上传下载
前言: 文件上传下载在项目开发中是一个非常常见的业务场景,在云服务上还没有兴起的时候,一般来说都会把文件单独存放到文件服务器上,随着云服务的兴起,各类云服务厂商都提供了 OSS 服务,本篇我们分享 Spri…...
使用ERA5数据绘制风向玫瑰图的简易流程
使用ERA5数据绘制风向玫瑰图的简易流程 今天需要做一个2017年-2023年的平均风向的统计,做一个风向玫瑰图,想到的还是高分辨率的ERA5land的数据(0.1分辨率,逐小时分辨率,1950年至今)。 风向,我分为了16个&…...
测试脚本并发多进程:pytest-xdist用法
参考:https://www.cnblogs.com/poloyy/p/12694861.html pytest-xdist详解: https://www.cnblogs.com/poloyy/p/14708825.html 总 https://www.cnblogs.com/poloyy/category/1690628.html...
数据可视化的Python实现
一、GDELT介绍 GDELT ( www.gdeltproject.org ) 每时每刻监控着每个国家的几乎每个角落的 100 多种语言的新闻媒体 -- 印刷的、广播的和web 形式的,识别人员、位置、组织、数量、主题、数据源、情绪、报价、图片和每秒都在推动全球社会的事件,GDELT 为全…...
【Linux系列】Linux 系统配置文件详解:`/etc/profile`、`~/.bashrc` 和 `~/.bash_profile`
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
uni-app实现小程序、H5图片轮播预览、双指缩放、双击放大、单击还原、滑动切换功能
前言 这次的标题有点长,主要是想要表述的功能点有点多; 简单做一下需求描述 产品要求在商品详情页的头部轮播图部分,可以单击预览大图,同时在预览界面可以双指放大缩小图片并且可以移动查看图片,双击放大࿰…...
游戏引擎学习第45天
仓库: https://gitee.com/mrxiao_com/2d_game 回顾 我们刚刚开始研究运动方程,展示了如何处理当人物遇到障碍物时的情况。有一种版本是角色会从障碍物上反弹,而另一版本是角色会完全停下来。这种方式感觉不太自然,因为在游戏中,…...
electron常用方法
一,,electron设置去除顶部导航栏和menu 1,electron项目 在创建BrowserWindow实例的main.js页面添加frame:false属性 2,electron-vue项目 在src/main/index.js文件下找到创建窗口的方法(createWindow)&…...
【Spark】Spark Join类型及Join实现方式
如果觉得这篇文章对您有帮助,别忘了点赞、分享或关注哦!您的一点小小支持,不仅能帮助更多人找到有价值的内容,还能鼓励我持续分享更多精彩的技术文章。感谢您的支持,让我们一起在技术的世界中不断进步! Sp…...
meta llama 大模型一个基础语言模型的集合
LLaMA 是一个基础语言模型的集合,参数范围从 7B 到 65B。我们在数万亿个 Token 上训练我们的模型,并表明可以专门使用公开可用的数据集来训练最先进的模型,而无需诉诸专有的和无法访问的数据集。特别是,LLaMA-13B 在大多数基准测试…...
JAVA爬虫获取1688关键词接口
以下是使用Java爬虫获取1688关键词接口的详细步骤和示例代码: 一、获取API接口访问权限 要使用1688关键词接口,首先需要获取API的使用权限,并了解接口规范。以下是获取API接口的详细步骤: 注册账号:在1688平台注册一…...
操作系统——内存管理
1、什么是虚拟内存?它是如何实现的?虚拟内存与物理内存之间有什么关系? 虚拟内存是操作系统提供的一种内存管理机制,它使程序认为自己拥有连续的内存空间,但实际上内存可能被分散存储在物理内存和磁盘交换空间中。 虚…...
android studio 模拟器不能联网?
模拟器路径: C:\Users\Administrator\AppData\Local\Android\Sdk\emulator\emulator.exe.关闭所有AVD设备实例 导航至: C:\Users\userName\AppData\Local\Android\Sdk\emulator查看模拟器名称 AdministratorDESKTOP-6JB1OGC MINGW64 ~/AppData/Local/…...
CTF-WEB: 目录穿越与模板注入 [第一届国城杯 Ez_Gallery ] 赛后学习笔记
step1 验证码处存在逻辑漏洞,只要不申请刷新验证码就一直有效 字典爆破得到 admin:123456 step2 /info?file../../../proc/self/cmdline获得 python/app/app.py经尝试,读取存在的目录时会返回 A server error occurred. Please contact the administrator./info?file.…...
数据结构6.4——归并排序
基本思想: 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个…...
【html 常用MIME类型列表】
本表仅列出了常用的MIME类型,完整列表参考文档。 浏览器通常使用 MIME 类型(而不是文件扩展名)来确定如何处理 URL,因此 Web 服务器在响应头中添加正确的 MIME 类型非常重要。 如果配置不正确,浏览器可能会曲解文件内容…...
内部劵淘网站怎么做/青岛seo结算
上面这张产品界面图是从360内部得来的,这是360马上要推出的一款路由器相关产品。据笔者得到的消息,360这款产品将打着“0元智能路由器”的噱头招摇上市,并且奇怪的是,这款“路由器”并非360安全路由部门的大作,而是一个…...
深圳做网站服务商/淘宝seo是什么意思
在jQuery四周岁生日来临之际,jQuery团队发布了万众期待的jQuery 1.4。该版本最显著的特点就是最常用的jQuery方法的性能得到了显著的提升。 jQuery 1.4对很多常用的方法进行了改写。在分析代码基时,我们发现与之前的版本相比,新版的jQuery的性…...
怎么创建网站平台赚钱/网站批量查询
编辑:ll MDC110-16-ASEMI工业控制柜模块MDC110-16 型号:MDC110-16 品牌:ASEMII 封装:MDC 电性参数:110A 1600V 正向电流:110A 反向耐压:1600V 引脚数量:2 恢复时间…...
临湘网站建设/整合营销传播案例
在不知道未来的时候,要把握住现在。 第一部分:结缘计算机 你为什么选择计算机专业?你认为你的条件如何?和这些博主比呢?(必答)我上大学之前对于计算机专业真的了解不多,顶多知道它是…...
一个专门做试题的网站/广东深圳疫情最新消息今天
说明:这是一个做交换机朋友给的一个方法,只做老化测试,不做压力满载测试。 我所理解的:老化测试是指在一定的时间内工作负荷之后,看有没有故障和不稳定的现象出现。 而对于压力测试,需要通过专业的测试设备…...
网站扫描怎么做/培训机构好还是学校好
LeetCode 198. 打家劫舍原题思路代码运行截图收获原题 LeetCode 198. 打家劫舍 思路 从头开始遍历,用一个dp[n][2]的数组来记录遍历到当前房屋时能够偷窃到的最高金额。dp[i][0]代表不偷第i间房屋能够获得的最高金额,即dp[i-1][0],dp[i-1]…...