Toggle navigation
Toggle navigation
This project
Loading...
Sign in
fe
/
yohobuy-node
·
Commits
Go to a project
GitLab
Go to group
Project
Activity
Files
Commits
Pipelines
0
Builds
0
Graphs
Milestones
Issues
1
Merge Requests
0
Members
Labels
Wiki
Forks
Network
Create a new issue
Download as
Email Patches
Plain Diff
Browse Files
Authored by
姜枫
8 years ago
Commit
8c3959362580c10be7095b94663b4788e185cc9c
1 parent
13091132
change ip from x-forward-for
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
15 additions
and
5 deletions
doraemon/middleware/limiter/index.js
doraemon/middleware/limiter/policies/captcha.js
doraemon/middleware/limiter/rules/qps-limit.js
doraemon/middleware/limiter/index.js
View file @
8c39593
...
...
@@ -20,14 +20,17 @@ const limiter = (rule, policy, context) => {
module
.
exports
=
(
req
,
res
,
next
)
=>
{
let
remoteIp
=
req
.
get
(
'X-Forwarded-For'
)
||
req
.
connection
.
remoteAddress
;
logger
.
debug
(
'request remote ip: '
,
remoteIp
);
if
(
remoteIp
.
indexOf
(
','
)
>
0
)
{
let
arr
=
remoteIp
.
split
(
','
);
remoteIp
=
arr
[
0
];
remoteIp
=
arr
[
arr
.
length
-
1
];
}
remoteIp
=
_
.
trim
(
remoteIp
);
logger
.
info
(
'request remote ip: '
,
remoteIp
);
const
excluded
=
_
.
includes
(
IP_WHITE_LIST
,
remoteIp
);
const
enabled
=
!
_
.
get
(
req
.
app
.
locals
,
'pc.sys.noLimiter'
);
...
...
doraemon/middleware/limiter/policies/captcha.js
View file @
8c39593
...
...
@@ -18,6 +18,10 @@ module.exports = (req, res, next) => {
return
next
();
}
if
(
res
.
statusCode
==
403
)
{
return
res
.
end
();
}
if
(
req
.
xhr
)
{
return
res
.
json
({
code
:
400
,
...
...
doraemon/middleware/limiter/rules/qps-limit.js
View file @
8c39593
...
...
@@ -29,7 +29,7 @@ module.exports = (limiter, policy) => {
const
key
=
`
pc
:
limiter
:
$
{
limiter
.
remoteIp
}
`
;
res
.
on
(
'render'
,
function
()
{
res
.
on
(
'render'
,
function
()
{
let
route
=
req
.
route
?
req
.
route
.
path
:
''
;
let
appPath
=
req
.
app
.
mountpath
;
...
...
@@ -58,7 +58,10 @@ module.exports = (limiter, policy) => {
return
Promise
.
resolve
(
true
);
}
if
(
result
>
MAX_QPS
)
{
// 判断 qps
if
(
result
===
9999
)
{
res
.
statusCode
=
403
;
return
Promise
.
resolve
(
policy
);
}
else
if
(
result
>
MAX_QPS
)
{
// 判断 qps
cache
.
touch
(
key
,
ONE_DAY
);
logger
.
debug
(
'req limit'
,
key
);
...
...
@@ -69,7 +72,7 @@ module.exports = (limiter, policy) => {
}
}
else
{
cache
.
setAsync
(
key
,
1
,
60
);
// 设置key,1m失效
cache
.
setAsync
(
key
,
1
,
60
);
// 设置key,1m失效
return
Promise
.
resolve
(
true
);
}
});
...
...
Please
register
or
login
to post a comment