定制网站和模板网站有何区别,北京网页制作,旅游网站规划方案,商城网站管理系统文章目录 一、需求提出二、应用场景三、解决思路四、注意事项五、完整代码第一步#xff1a;前端对密码进行加密第二步#xff1a;后端工具类实现 RSA 加解密功能第三步#xff1a;登录接口中添加解密逻辑 六、运行结果总结 一、需求提出
在默认情况下#xff0c;RuoYi 微… 文章目录 一、需求提出二、应用场景三、解决思路四、注意事项五、完整代码第一步前端对密码进行加密第二步后端工具类实现 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用户进入系统主页。
总结
通过前端加密与后端解密的配合可以有效提升登录接口的安全性避免密码明文传输可能带来的风险。这种方式简单实用适用于需要保护用户敏感数据的场景。