Vue中使用base64和JSEncrypt对其明文进行加密处理

1、最近项目中要求对其明文传输进行加密处理,在此,整理了一下,这里使用的是base64和jsencrypt对其明文传输进行加密处理,如下在request.js对其所有请求进行加密处理:

import axios from 'axios'
import { Notification, MessageBox, Message } from 'element-ui'
import store from '@/store'
import { getToken } from '@/utils/auth'
import errorCode from '@/utils/errorCode'
import base from '@/utils/base64' 
import { encrypt } from '@/utils/jsencrypt'
axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
// 创建axios实例
const service = axios.create({
	// axios中请求配置有baseURL选项,表示请求URL公共部分
	baseURL: process.env.VUE_APP_BASE_API,
	// 超时
	timeout: 90000,
})

// request拦截器
service.interceptors.request.use(config => {
	// 是否需要设置 token
	const isToken = (config.headers || {}).isToken === false
	if (getToken() && !isToken) {
		config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
	}
	// get请求映射params参数
	if (config.method === 'get' && config.params) {
		let encryptData;
		encryptData = config.params
		encryptData = JSON.stringify(config.params)
		// config.params = encryptData
		// console.log(config.params,'get加密')
		encryptData = encrypt(encryptData)
		encryptData = encodeURIComponent(encryptData)
		//let url = config.url + '?'
		let url = config.url + '?'+'encryptData='+encryptData;
		config.params = {};
		config.url = url;
	}
	if ((config.method === 'post' || config.method === 'put') && config.data){
		config.data = JSON.stringify(config.data)
		// console.log(config.data,'之前数据1111111')
		let base1 = new base();
		config.data = base1.encode(config.data)
		// console.log(config.data,'加密数据1111111')
	}
	return config
}, error => {
	console.log(error)
	Promise.reject(error)
})

// 响应拦截器
service.interceptors.response.use(res => {
	// 未设置状态码则默认成功状态
	const code = res.data.code || 200;
	// 获取错误信息
	const msg = errorCode[code] || res.data.msg || errorCode['default']
	if (code === 401) {
		MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', {
			confirmButtonText: '重新登录',
			cancelButtonText: '取消',
			type: 'warning'
		}
		).then(() => {
			store.dispatch('LogOut').then(() => {
				// location.href = '/index';
				location.href = this.$router.options.base+'/index';//部署
			})
		})
	} else if (code === 500) {
		Message({
			message: msg,
			type: 'error'
		})
		return Promise.reject(new Error(msg))
	} else if (code !== 200) {
		Notification.error({
			title: msg
		})
		return Promise.reject('error')
	} else {
		return res.data
	}
},
	error => {
		console.log('err' + error)
		let { message } = error;
		if (message == "Network Error") {
			message = "后端接口连接异常";
		}
		else if (message.includes("timeout")) {
			message = "系统接口请求超时";
		}
		else if (message.includes("Request failed with status code")) {
			message = "系统接口" + message.substr(message.length - 3) + "异常";
		}
		Message({
			message: message,
			type: 'error',
			duration: 5 * 1000
		})
		return Promise.reject(error)
	}
)

export default service

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时间的情敌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值