前言:想把vue3的网站项目1内嵌到别的项目2内部。
希望在项目2内,点击一个按钮就出现一个页面进入项目1,其中用户名密码是互通的(这一块需要接口调用实现同步),仔细一想,原理应该是提供一个地址链接,前台的routr.push{}进入页面,里面带上query的参数,类似于后端的get请求传参。
注:免密登录直接跳转进入系统内部的路径(密码可以后期双方通讯的时候实现加密)
http://localhost:80/#/biglogin?name=admin&pass=123456
注:正常的前端登录的路径
http://localhost:80/#/login
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 密码加密功能
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);}//解码返回bytepublic 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);}
}