前言:想把vue3的网站项目1内嵌到别的项目2内部。
希望在项目2 内,点击一个按钮就出现一个页面进入**项目1,**其中用户名密码是互通的(这一块需要接口调用实现同步),仔细一想,原理应该是提供一个地址链接,前台的routr.push{}进入页面,里面带上query的参数,类似于后端的get请求传参。
注:免密登录直接跳转进入系统内部的路径(密码可以后期双方通讯的时候实现加密)
http://localhost:80/#/biglogin?name=admin&pass=123456
注:正常的前端登录的路径
1.随便创建一个新页面bigindex.vue,(复制出原有的index.vue页面,因为vue3项目可以作为单独项目独立出来(需要登录),又需要内嵌入另一系统中(内嵌登录的信息直接进入系统内部)
2.加白名单
3.加登陆跳转
4.前端密码加密JSEncrypt 功能
import JSEncrypt from 'jsencrypt';
const encryptor = new JSEncrypt();
const pubKey = `MIGfMA0GCSqGSIb3DQE***********************************************`;
encryptor.setPublicKey(pubKey);
param.pwd = encryptor.encrypt(state.form.password);
5.后端使用解密,前端的JSEncrypt 密码加密功能
java
import org.apache.commons.codec.binary.Base64;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import java.security.*;
import java.security.interfaces.RSAPrivateKey;
import java.security.interfaces.RSAPublicKey;
import javax.crypto.Cipher;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Map;
import java.util.HashMap;
//前端 JSEncrypt 的加解密使用
public class RSAUtil {
//公钥,可以写前端
public static String public_key=Constant.rsa_public_key;
//私钥,只能放后端
public static String private_key=Constant.rsa_private_pkcs8;
//公钥=MIGfM*****************
//私钥=MIICd**************************
public static void test() throws Exception {
// 1.初始化秘钥
KeyPairGenerator keyPairGenerator;
try {
keyPairGenerator = KeyPairGenerator.getInstance("RSA");
// 随机数生成器
SecureRandom sr = new SecureRandom();
// 设置1024位长的秘钥
keyPairGenerator.initialize(1024, sr);
// 开始创建
KeyPair keyPair = keyPairGenerator.generateKeyPair();
//获取公钥
RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();
//获取私钥
RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();
//对公钥进行编码
String PUBLIC_KEY = Base64.encodeBase64String(rsaPublicKey.getEncoded());
System.out.println("公钥=" + PUBLIC_KEY);
//对私钥进行编码
String PRIVATE_KEY = Base64.encodeBase64String(rsaPrivateKey.getEncoded());
System.out.println("私钥=" + PRIVATE_KEY);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
// test();
//解密数据
try {
//生成公钥和私钥
genKeyPair();
String publicKey = keyMap.get(0);
//打印出来自己记录下
System.out.println("公钥:" + publicKey);
String privateKey = keyMap.get(1);
//打印出来自己记录下
System.out.println("私钥:" + privateKey);
//获取到后,可以放这里,测试下能不能正确加解密
publicKey = public_key;
privateKey = private_key;
String orgData = "test";
System.out.println("原数据:" + orgData);
//加密
String encryptStr =encrypt(orgData,publicKey);
System.out.println("加密结果:" + encryptStr);
//解密
String decryptStr = decrypt("encryptStr ",privateKey);
System.out.println("解密结果:" + decryptStr);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* RSA公钥加密
*
* @param str 加密字符串
* @param publicKey 公钥
* @return 密文
* @throws Exception 加密过程中的异常信息
*/
public static String encrypt(String str,String publicKey) throws Exception {
//base64编码的公钥
byte[] decoded = decryptBASE64(publicKey);
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded));
//RSA加密
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, pubKey);
String outStr = encryptBASE64(cipher.doFinal(str.getBytes("UTF-8")));
return outStr;
}
/**
* RSA私钥解密
*
* @param str 加密字符串
* @param privateKey 私钥
* @return 明文
* @throws Exception 解密过程中的异常信息
*/
public static String decrypt(String str, String privateKey) throws Exception {
//64位解码加密后的字符串
byte[] inputByte = decryptBASE64(str);
//base64编码的私钥
byte[] decoded = decryptBASE64(privateKey);
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded));
//RSA解密
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, priKey);
String outStr = new String(cipher.doFinal(inputByte));
return outStr;
}
//编码返回字符串
public static String encryptBASE64(byte[] key) throws Exception {
return (new BASE64Encoder()).encodeBuffer(key);
}
//解码返回byte
public static byte[] decryptBASE64(String key) throws Exception {
return (new BASE64Decoder()).decodeBuffer(key);
}
/**
* 密钥长度 于原文长度对应 以及越长速度越慢
*/
private final static int KEY_SIZE = 1024;
/**
* 用于封装随机产生的公钥与私钥
*/
private static Map<Integer, String> keyMap = new HashMap<Integer, String>();
/**
* 随机生成密钥对
* @throws Exception
*/
public static void genKeyPair() throws Exception {
// KeyPairGenerator类用于生成公钥和私钥对,基于RSA算法生成对象
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
// 初始化密钥对生成器
keyPairGen.initialize(KEY_SIZE, new SecureRandom());
// 生成一个密钥对,保存在keyPair中
KeyPair keyPair = keyPairGen.generateKeyPair();
// 得到私钥
RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
// 得到公钥
RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
String publicKeyString = encryptBASE64(publicKey.getEncoded());
// 得到私钥字符串
String privateKeyString = encryptBASE64(privateKey.getEncoded());
// 将公钥和私钥保存到Map
//0表示公钥
keyMap.put(0, publicKeyString);
//1表示私钥
keyMap.put(1, privateKeyString);
}
}