Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
jeecg
jeecg-boot
提交
8b3d83ae
J
jeecg-boot
项目概览
jeecg
/
jeecg-boot
上一次同步 3 年多
通知
865
Star
24375
Fork
84
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
jeecg-boot
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
8b3d83ae
编写于
6月 21, 2021
作者:
JEECG低代码平台
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
HW21-0499 表字典接口存在SQL注入漏洞,增加签名拦截器
上级
081c2615
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
146 addition
and
3 deletion
+146
-3
ant-design-vue-jeecg/src/api/manage.js
ant-design-vue-jeecg/src/api/manage.js
+19
-3
ant-design-vue-jeecg/src/utils/encryption/signMd5Utils.js
ant-design-vue-jeecg/src/utils/encryption/signMd5Utils.js
+127
-0
未找到文件。
ant-design-vue-jeecg/src/api/manage.js
浏览文件 @
8b3d83ae
import
Vue
from
'
vue
'
import
{
axios
}
from
'
@/utils/request
'
import
signMd5Utils
from
'
@/utils/encryption/signMd5Utils
'
const
api
=
{
user
:
'
/mock/api/user
'
,
...
...
@@ -13,19 +14,29 @@ export default api
//post
export
function
postAction
(
url
,
parameter
)
{
let
sign
=
signMd5Utils
.
getSign
(
url
,
parameter
);
//将签名和时间戳,添加在请求接口 Header
let
signHeader
=
{
"
X-Sign
"
:
sign
,
"
X-TIMESTAMP
"
:
signMd5Utils
.
getDateTimeToString
()};
return
axios
({
url
:
url
,
method
:
'
post
'
,
data
:
parameter
data
:
parameter
,
headers
:
signHeader
})
}
//post method= {post | put}
export
function
httpAction
(
url
,
parameter
,
method
)
{
let
sign
=
signMd5Utils
.
getSign
(
url
,
parameter
);
//将签名和时间戳,添加在请求接口 Header
let
signHeader
=
{
"
X-Sign
"
:
sign
,
"
X-TIMESTAMP
"
:
signMd5Utils
.
getDateTimeToString
()};
return
axios
({
url
:
url
,
method
:
method
,
data
:
parameter
data
:
parameter
,
headers
:
signHeader
})
}
...
...
@@ -40,10 +51,15 @@ export function putAction(url,parameter) {
//get
export
function
getAction
(
url
,
parameter
)
{
let
sign
=
signMd5Utils
.
getSign
(
url
,
parameter
);
//将签名和时间戳,添加在请求接口 Header
let
signHeader
=
{
"
X-Sign
"
:
sign
,
"
X-TIMESTAMP
"
:
signMd5Utils
.
getDateTimeToString
()};
return
axios
({
url
:
url
,
method
:
'
get
'
,
params
:
parameter
params
:
parameter
,
headers
:
signHeader
})
}
...
...
ant-design-vue-jeecg/src/utils/encryption/signMd5Utils.js
0 → 100644
浏览文件 @
8b3d83ae
import
md5
from
'
md5
'
//签名密钥串(前后端要一致,正式发布请自行修改)
const
signatureSecret
=
"
dd05f1c54d63749eda95f9fa6d49v442a
"
;
export
default
class
signMd5Utils
{
/**
* json参数升序
* @param jsonObj 发送参数
*/
static
sortAsc
(
jsonObj
)
{
let
arr
=
new
Array
();
let
num
=
0
;
for
(
let
i
in
jsonObj
)
{
arr
[
num
]
=
i
;
num
++
;
}
let
sortArr
=
arr
.
sort
();
let
sortObj
=
{};
for
(
let
i
in
sortArr
)
{
sortObj
[
sortArr
[
i
]]
=
jsonObj
[
sortArr
[
i
]];
}
return
sortObj
;
}
/**
* @param url 请求的url,应该包含请求参数(url的?后面的参数)
* @param requestParams 请求参数(POST的JSON参数)
* @returns {string} 获取签名
*/
static
getSign
(
url
,
requestParams
)
{
let
urlParams
=
this
.
parseQueryString
(
url
);
let
jsonObj
=
this
.
mergeObject
(
urlParams
,
requestParams
);
//console.log("sign jsonObj: ",jsonObj)
let
requestBody
=
this
.
sortAsc
(
jsonObj
);
console
.
log
(
"
sign requestBody:
"
,
requestBody
)
return
md5
(
JSON
.
stringify
(
requestBody
)
+
signatureSecret
).
toUpperCase
();
}
/**
* @param url 请求的url
* @returns {{}} 将url中请求参数组装成json对象(url的?后面的参数)
*/
static
parseQueryString
(
url
)
{
let
urlReg
=
/^
[^\?]
+
\?([\w\W]
+
)
$/
,
paramReg
=
/
([^
&=
]
+
)
=
([\w\W]
*
?)(
&|$|#
)
/g
,
urlArray
=
urlReg
.
exec
(
url
),
result
=
{};
// 获取URL上最后带逗号的参数变量 sys/dict/getDictItems/sys_user,realname,username
let
lastpathVariable
=
url
.
substring
(
url
.
lastIndexOf
(
'
/
'
)
+
1
);
if
(
lastpathVariable
.
includes
(
"
,
"
)){
if
(
lastpathVariable
.
includes
(
"
?
"
)){
lastpathVariable
=
lastpathVariable
.
substring
(
0
,
lastpathVariable
.
indexOf
(
"
?
"
));
}
result
[
"
x-path-variable
"
]
=
lastpathVariable
;
}
if
(
urlArray
&&
urlArray
[
1
])
{
let
paramString
=
urlArray
[
1
],
paramResult
;
while
((
paramResult
=
paramReg
.
exec
(
paramString
))
!=
null
)
{
//数字值转为string类型,前后端加密规则保持一致
if
(
this
.
myIsNaN
(
paramResult
[
2
])){
paramResult
[
2
]
=
paramResult
[
2
].
toString
()
}
result
[
paramResult
[
1
]]
=
paramResult
[
2
];
}
}
return
result
;
}
/**
* @returns {*} 将两个对象合并成一个
*/
static
mergeObject
(
objectOne
,
objectTwo
)
{
if
(
objectTwo
&&
Object
.
keys
(
objectTwo
).
length
>
0
)
{
for
(
let
key
in
objectTwo
)
{
if
(
objectTwo
.
hasOwnProperty
(
key
)
===
true
)
{
//数字值转为string类型,前后端加密规则保持一致
if
(
this
.
myIsNaN
(
objectTwo
[
key
])){
objectTwo
[
key
]
=
objectTwo
[
key
].
toString
()
}
objectOne
[
key
]
=
objectTwo
[
key
];
}
}
}
return
objectOne
;
}
static
urlEncode
(
param
,
key
,
encode
)
{
if
(
param
==
null
)
return
''
;
let
paramStr
=
''
;
let
t
=
typeof
(
param
);
if
(
t
==
'
string
'
||
t
==
'
number
'
||
t
==
'
boolean
'
)
{
paramStr
+=
'
&
'
+
key
+
'
=
'
+
((
encode
==
null
||
encode
)
?
encodeURIComponent
(
param
)
:
param
);
}
else
{
for
(
let
i
in
param
)
{
let
k
=
key
==
null
?
i
:
key
+
(
param
instanceof
Array
?
'
[
'
+
i
+
'
]
'
:
'
.
'
+
i
);
paramStr
+=
this
.
urlEncode
(
param
[
i
],
k
,
encode
);
}
}
return
paramStr
;
};
static
getDateTimeToString
()
{
const
date_
=
new
Date
()
const
year
=
date_
.
getFullYear
()
let
month
=
date_
.
getMonth
()
+
1
let
day
=
date_
.
getDate
()
if
(
month
<
10
)
month
=
'
0
'
+
month
if
(
day
<
10
)
day
=
'
0
'
+
day
let
hours
=
date_
.
getHours
()
let
mins
=
date_
.
getMinutes
()
let
secs
=
date_
.
getSeconds
()
const
msecs
=
date_
.
getMilliseconds
()
if
(
hours
<
10
)
hours
=
'
0
'
+
hours
if
(
mins
<
10
)
mins
=
'
0
'
+
mins
if
(
secs
<
10
)
secs
=
'
0
'
+
secs
if
(
msecs
<
10
)
secs
=
'
0
'
+
msecs
return
year
+
''
+
month
+
''
+
day
+
''
+
hours
+
''
+
mins
+
''
+
secs
}
// true:数值型的,false:非数值型
static
myIsNaN
(
value
)
{
return
typeof
value
===
'
number
'
&&
!
isNaN
(
value
);
}
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录