• vue开发axios请求 用SM2加密,解密


      1 import axios from "axios";
      2 import { Message } from 'element-ui'
      3 // 地址
      4 // let baseUrl = 'http://'
      5 let username = 'sesp1'
      6 //加解密开关
      7 window.ENCRYPT=false
      8 /*公钥*/
      9 var publicKey="";
     10 /*私钥*/
     11 var privateKey=""
     12 
     13 /*分割字符串*/
     14 function splitStr (str) {
     15     var len = Math.ceil(str.length / 500)
     16     var arr = Array(len)
     17     var i = 0
     18     for (; i < len; i++) {
     19         // console.log('index: %s, len: %s, str: %s', i, len, str.length)
     20         arr[i] = str.substring(0, 500)
     21         if (i < len) {
     22             str = str.substring(500, str.length)
     23         }
     24     }
     25     return arr
     26 }
     27 /**
     28  * SM2加密
     29  */
     30 function encryptSM2 (word) {
     31 
     32     var str = btoa(encodeURIComponent(JSON.stringify(word)))
     33     var arrStr = splitStr(str).map(s => window.SG_sm2Encrypt(s, publicKey))
     34     return arrStr.join('|')
     35 }
     36 
     37 /**
     38  * SM3哈希
     39  */
     40  function encryptSM3 (word) {
     41     return window.SG_sm3encrypt(word)
     42 }
     43 /**
     44  * SM2解密
     45  */
     46 function decryptSM2$$2 (word) {
     47     var strs = word.split('|').map(s => window.SG_sm2Decrypt(s, privateKey))
     48     var json=JSON.parse(decodeURIComponent(atob(strs.join(''))))
     49     return json
     50 }
     51 
     52 const service = axios.create({
     53     baseURL: baseUrl, // api 的 base_url
     54 
     55 });
     56 
     57 
     58 //1.添加请求拦截器
     59 service.interceptors.request.use((config) => {
     60     config.url = config.baseURL + config.url;
     61     if (config.data.username && config.data.username == 'sesp1') {
     62         config.data.username = username
     63     }
     64     //请求数据
     65     let baseParams=config.data;
     66     // console.log("基本参数",baseParams)
     67     let savelogParams={};
     68     // console.log("埋点参数",savelogParams)
     69 
     70     //headers封装
     71     config.headers={
     72         y:new Date().getTime(),
     73     };
     74     //埋點加密參數  注:SM3后面的参数是集成参数
     75     let secSavelogParams=window.ENCRYPT?encryptSM2(savelogParams):savelogParams
     76 
     77     if(window.ENCRYPT){
     78       config.data={
     79         iespsm:encryptSM2(baseParams),
     80         timestamp:new Date().getTime()
     81       };
     82       config.headers["SignSM3"]=encryptSM3(JSON.stringify(config.data)+secSavelogParams)
     83     }
     84     config.headers["buried"]=(window.ENCRYPT)?secSavelogParams:encodeURIComponent(JSON.stringify(savelogParams))
     85       if (window.sessionStorage.getItem("JWT")) {
     86           config.headers.Authorization = window.sessionStorage.getItem("JWT")
     87       }
     88     return config;
     89     }, (error) => {
     90     Message({
     91         showClose: true,
     92         message: '网络错误,请稍后重试!',
     93         type: "warning"
     94     });
     95     return Promise.reject(error);
     96 });
     97 //2.添加响应拦截器
     98 service.interceptors.response.use((res) => {
     99     if(window.ENCRYPT){
    100         /*判断解密*/
    101         if(null!=res.data.iespData&&undefined!=res.data.iespData){
    102             res.data=decryptSM2$$2(res.data.iespData)
    103         }    
    104     }
    105     // console.log("响应数据",res) 
    106     return res;
    107 }, (error) => {
    108     Message({
    109         showClose: true,
    110         message: '网络错误,请稍后重试!',
    111         type: "warning"
    112     });
    113     return Promise.reject(error);
    114 });
    115 
    116 
    117 export default service;

    在main.js中引入sm.js;静态文件注入需放在public下的static目录下

  • 相关阅读:
    JDK版本1.6和6.0到底指什么
    分布式存储Memcache替代Session方案
    Spring事务隔离级别和传播特性
    高性能并发系统架构应该如何设计?关键是什么?12306
    Idea无法DEBUG的问题
    springboot(三 使用mybatis +springboot 完成简单的增删改查)
    springboot(二 如何访问静态资源和使用模板引擎,以及 全局异常捕获)
    spring boot (入门简介 demo)
    java1.8新特性(optional 使用)
    java1.8 新特性(关于 match,find reduce )操作
  • 原文地址:https://www.cnblogs.com/ting-0424/p/13566008.html
Copyright © 2020-2023  润新知