添加环境配置项,控制启用/不启用加密功能。

This commit is contained in:
wu.jifen
2025-09-02 10:33:15 +08:00
parent eb70d12e55
commit 0c4c2ee084
4 changed files with 53 additions and 40 deletions

3
.env
View File

@@ -3,5 +3,6 @@ NODE_ENV = 'dev' // 如果是生产环境请记得切换为production
# flag # flag
VUE_APP_FLAG='dev' VUE_APP_FLAG='dev'
VUE_APP_ADMIN='http://39.104.123.254:7196' VUE_APP_ADMIN='http://39.104.123.254:7197'
VUE_APP_DOCS='http://39.104.123.254:7546/' VUE_APP_DOCS='http://39.104.123.254:7546/'
VUE_APP_USE_ENCRYPT='false'

View File

@@ -3,7 +3,8 @@ NODE_ENV = 'dev' // 如果是生产环境请记得切换为production
# flag # flag
VUE_APP_FLAG='dev' VUE_APP_FLAG='dev'
VUE_APP_ADMIN='http://39.104.123.254:7196' VUE_APP_ADMIN='http://39.104.123.254:7197'
VUE_APP_STATIC='http://39.104.123.254:7536/' VUE_APP_STATIC='http://39.104.123.254:7536/'
VUE_APP_USE_ENCRYPT='false'

View File

@@ -14,11 +14,14 @@ NProgress.configure({ showSpinner: false }) // NProgress Configuration
const whiteList = ['/login', '/authentication', '/404'] // no redirect whitelist const whiteList = ['/login', '/authentication', '/404'] // no redirect whitelist
router.beforeEach(async (to, from, next) => { router.beforeEach(async (to, from, next) => {
if (getPrivateKey() === '' || getPrivateKey() === null) { let envInfo = process.env
await fetchPrivateKey() if (envInfo.VUE_APP_USE_ENCRYPT === 'true') {
} if (getPrivateKey() === '' || getPrivateKey() === null) {
if (getPublicKey() === '' || getPublicKey() === null) { await fetchPrivateKey()
await fetchPublicKey() }
if (getPublicKey() === '' || getPublicKey() === null) {
await fetchPublicKey()
}
} }
routerEach(to, from, next) routerEach(to, from, next)
}) })

View File

@@ -31,6 +31,8 @@ function endLoading() {
} }
} }
let envInfo = process.env
// request interceptor // request interceptor
service.interceptors.request.use( service.interceptors.request.use(
config => { config => {
@@ -47,31 +49,35 @@ service.interceptors.request.use(
if (deviceId) { if (deviceId) {
config.headers['deviceId'] = localStorage.getItem('deviceId') config.headers['deviceId'] = localStorage.getItem('deviceId')
} }
// 3. 判断是否需要加密:跳过非 JSON 请求、OPTIONS 请求、自定义排除项 if (envInfo.VUE_APP_USE_ENCRYPT === 'true') {
const shouldSkipEncryption = () => { // 3. 判断是否需要加密:跳过非 JSON 请求、OPTIONS 请求、自定义排除项
// 跳过 Content-Type 不是 application/json 的请求 const shouldSkipEncryption = () => {
const contentType = // 跳过 Content-Type 不是 application/json 的请求
config.headers['Content-Type'] || config.headers['content-type'] const contentType =
if (contentType && !contentType.includes('application/json')) { config.headers['Content-Type'] || config.headers['content-type']
return true if (contentType && !contentType.includes('application/json')) {
return true
}
// // 跳过自定义标记不加密的请求 (在encrypt.js中已写这部分逻辑)
const url = config.url
.substring(config.url.lastIndexOf(':'))
.substring(6)
return !shouldEncrypt(url)
} }
// // 跳过自定义标记不加密的请求 (在encrypt.js中已写这部分逻辑) // 4. 执行加密逻辑
const url = config.url.substring(config.url.lastIndexOf(':')).substring(6) if (!shouldSkipEncryption()) {
return !shouldEncrypt(url) // 添加加密标识(便于调试)
} config.headers['X-Encrypted'] = 'true'
// 4. 执行加密逻辑 if (config.data) {
if (!shouldSkipEncryption()) { // 保存原始数据用于调试
// 添加加密标识(便于调试) config.originalData = config.data
config.headers['X-Encrypted'] = 'true'
if (config.data) { // 加密数据,包装成 { content: "encryptedString" }
// 保存原始数据用于调试 config.data = { content: encrypt(config.data, config.url) }
config.originalData = config.data }
// 加密数据,包装成 { content: "encryptedString" }
config.data = { content: encrypt(config.data, config.url) }
} }
} }
@@ -89,19 +95,21 @@ service.interceptors.request.use(
service.interceptors.response.use( service.interceptors.response.use(
response => { response => {
let res = response.data let res = response.data
// 解密处理 if (envInfo.VUE_APP_USE_ENCRYPT === 'true') {
if ( // 解密处理
response.config.headers['X-Encrypted'] === 'true' && if (
typeof res === 'string' response.config.headers['X-Encrypted'] === 'true' &&
) { typeof res === 'string'
try { ) {
res = decryptWithPrivateKey(res) try {
} catch (e) { res = decryptWithPrivateKey(res)
logger.error('解密响应失败', e) } catch (e) {
logger.error('解密响应失败', e)
}
}
if (res !== '' && typeof res === 'string') {
res = JSON.parse(res)
} }
}
if (res !== '' && typeof res === 'string') {
res = JSON.parse(res)
} }
endLoading() endLoading()
if (response.config.back) { if (response.config.back) {