vue3的网站项目内嵌到别的项目内部,通过用户名免登陆

前言:想把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 密码加密功能

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);
    }
}
相关推荐
Li_RuiQi10 小时前
DAgger方法演进_独立学习笔记
笔记·学习·计算机视觉
Li_RuiQi14 小时前
DAgger与交互式模仿学习_ACT学习笔记
笔记·学习
He BianGu14 小时前
【笔记】C# 中BindingFlags的详细作用
笔记·c#
AI视觉网奇14 小时前
turtle 入门教程笔记
笔记
跨知易知识产权15 小时前
美国专利确权是什么,和专利诉讼有什么不一样?
笔记
杨逢昌工厂6S管理15 小时前
126-杨逢昌6S三环体系:越做越乱的现场熵增机理与基准化治理——一线现场诊断笔记
经验分享·笔记·职场和发展·学习方法
悟道书生15 小时前
若依 RBAC 权限控制学习笔记
java·网络·笔记·sql·学习·vue
陈哈哈111116 小时前
折腾了半天,总算把 Vim 9.2 装明白了
笔记
陈哈哈111116 小时前
折腾了半天,总算把 OpenGL 的开发环境给装明白了
笔记
深圳老胡17 小时前
STM32F103 硬件 SPI 与软件 IO 模拟 SPI 最高速度差异详解
笔记·stm32·单片机·代码规范·1024程序员节