Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
X
xyqb-user2
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
head_group
xyqb-user2
Commits
c5fd8152
Commit
c5fd8152
authored
Dec 17, 2024
by
李文彬
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat(*): 开启 ip 白名单限制
parent
3e95d329
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
49 additions
and
14 deletions
+49
-14
IpLimiterProperties.java
...java/cn/quantgroup/xyqb/constant/IpLimiterProperties.java
+18
-0
IpLimitController.java
.../quantgroup/xyqb/controller/api/v2/IpLimitController.java
+11
-1
IpLimitFilter.java
src/main/java/cn/quantgroup/xyqb/filter/IpLimitFilter.java
+20
-13
No files found.
src/main/java/cn/quantgroup/xyqb/constant/IpLimiterProperties.java
0 → 100644
View file @
c5fd8152
package
cn
.
quantgroup
.
xyqb
.
constant
;
import
lombok.Getter
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.cloud.context.config.annotation.RefreshScope
;
import
org.springframework.stereotype.Component
;
/**
* @author hyuk
*/
@Getter
@RefreshScope
@Component
public
class
IpLimiterProperties
{
@Value
(
"${extranet.known.ips:123.56.31.54}"
)
private
String
[]
extranetIps
;
}
src/main/java/cn/quantgroup/xyqb/controller/api/v2/IpLimitController.java
View file @
c5fd8152
package
cn
.
quantgroup
.
xyqb
.
controller
.
api
.
v2
;
package
cn
.
quantgroup
.
xyqb
.
controller
.
api
.
v2
;
import
cn.quantgroup.xyqb.constant.IpLimiterProperties
;
import
cn.quantgroup.xyqb.model.JsonResult
;
import
cn.quantgroup.xyqb.model.JsonResult
;
import
com.alibaba.fastjson.JSON
;
import
lombok.RequiredArgsConstructor
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.commons.lang3.StringUtils
;
...
@@ -34,7 +36,7 @@ public class IpLimitController {
...
@@ -34,7 +36,7 @@ public class IpLimitController {
}
}
String
status
=
stringRedisTemplate
.
opsForValue
().
get
(
IP_LIMIT_STATUS_KEY
);
String
status
=
stringRedisTemplate
.
opsForValue
().
get
(
IP_LIMIT_STATUS_KEY
);
if
(
StringUtils
.
isEmpty
(
status
))
{
if
(
StringUtils
.
isEmpty
(
status
))
{
status
=
"
1
"
;
status
=
"
0
"
;
}
}
return
JsonResult
.
buildSuccessResult
(
"success"
,
status
);
return
JsonResult
.
buildSuccessResult
(
"success"
,
status
);
}
}
...
@@ -50,4 +52,12 @@ public class IpLimitController {
...
@@ -50,4 +52,12 @@ public class IpLimitController {
stringRedisTemplate
.
opsForValue
().
set
(
IP_LIMIT_STATUS_KEY
,
status
);
stringRedisTemplate
.
opsForValue
().
set
(
IP_LIMIT_STATUS_KEY
,
status
);
return
JsonResult
.
buildSuccessResult
(
"success"
,
status
);
return
JsonResult
.
buildSuccessResult
(
"success"
,
status
);
}
}
private
final
IpLimiterProperties
ipLimiterProperties
;
@GetMapping
(
"/properties"
)
public
JsonResult
<
String
>
getProperties
()
{
return
JsonResult
.
buildSuccessResult
(
"success"
,
JSON
.
toJSONString
(
ipLimiterProperties
.
getExtranetIps
()));
}
}
}
src/main/java/cn/quantgroup/xyqb/filter/IpLimitFilter.java
View file @
c5fd8152
...
@@ -2,7 +2,9 @@ package cn.quantgroup.xyqb.filter;
...
@@ -2,7 +2,9 @@ package cn.quantgroup.xyqb.filter;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.extra.servlet.ServletUtil
;
import
cn.hutool.extra.servlet.ServletUtil
;
import
cn.quantgroup.xyqb.constant.IpLimiterProperties
;
import
cn.quantgroup.xyqb.util.IpUtil
;
import
cn.quantgroup.xyqb.util.IpUtil
;
import
com.alibaba.fastjson.JSON
;
import
lombok.Getter
;
import
lombok.Getter
;
import
lombok.RequiredArgsConstructor
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
...
@@ -20,6 +22,7 @@ import javax.servlet.ServletResponse;
...
@@ -20,6 +22,7 @@ import javax.servlet.ServletResponse;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
import
java.io.IOException
;
import
java.util.Map
;
import
java.util.Objects
;
import
java.util.Objects
;
import
java.util.concurrent.TimeUnit
;
import
java.util.concurrent.TimeUnit
;
...
@@ -33,12 +36,10 @@ import static cn.quantgroup.xyqb.controller.api.v2.IpLimitController.IP_LIMIT_ST
...
@@ -33,12 +36,10 @@ import static cn.quantgroup.xyqb.controller.api.v2.IpLimitController.IP_LIMIT_ST
@Configuration
@Configuration
public
class
IpLimitFilter
implements
Filter
{
public
class
IpLimitFilter
implements
Filter
{
@Getter
@Value
(
"${extranet.known.ips:123.56.31.54}"
)
private
String
[]
extranetIps
;
private
final
StringRedisTemplate
stringRedisTemplate
;
private
final
StringRedisTemplate
stringRedisTemplate
;
private
final
IpLimiterProperties
ipLimiterProperties
;
// 1. 日 IP 访问次数
// 1. 日 IP 访问次数
static
final
String
DAY_IP_COUNT_KEY
=
"xyqb_user:01:ip_limit:day_count:00cs:%s"
;
static
final
String
DAY_IP_COUNT_KEY
=
"xyqb_user:01:ip_limit:day_count:00cs:%s"
;
...
@@ -75,16 +76,22 @@ public class IpLimitFilter implements Filter {
...
@@ -75,16 +76,22 @@ public class IpLimitFilter implements Filter {
filterChain
.
doFilter
(
servletRequest
,
servletResponse
);
filterChain
.
doFilter
(
servletRequest
,
servletResponse
);
return
;
return
;
}
}
log
.
info
(
"[IpLimitFilter]外网调用, clientIp : {}, uri : {}"
,
clientIp
,
request
.
getRequestURI
());
String
uri
=
request
.
getRequestURI
();
if
(
request
.
getRequestURI
().
startsWith
(
"/ip/limit"
))
{
if
(
Objects
.
equals
(
uri
,
"/api/captcha/new"
))
{
filterChain
.
doFilter
(
servletRequest
,
servletResponse
);
response
.
setStatus
(
HttpServletResponse
.
SC_FORBIDDEN
);
return
;
return
;
}
}
filterChain
.
doFilter
(
servletRequest
,
servletResponse
);
return
;
Map
<
String
,
String
[]>
parameterMap
=
request
.
getParameterMap
();
String
status
=
stringRedisTemplate
.
opsForValue
().
get
(
IP_LIMIT_STATUS_KEY
);
log
.
info
(
"[IpLimitFilter]外网调用, clientIp : {}, uri : {}, params : {}, status : {}"
,
clientIp
,
request
.
getRequestURI
(),
JSON
.
toJSONString
(
parameterMap
),
status
);
if
(
status
==
null
||
Objects
.
equals
(
status
,
"0"
))
{
filterChain
.
doFilter
(
servletRequest
,
servletResponse
);
}
else
{
response
.
setStatus
(
HttpServletResponse
.
SC_FORBIDDEN
);
}
return
;
// String status = stringRedisTemplate.opsForValue().get(IP_LIMIT_STATUS_KEY);
// String status = stringRedisTemplate.opsForValue().get(IP_LIMIT_STATUS_KEY);
// if (status == null || Objects.equals(status, "1")) {
// if (status == null || Objects.equals(status, "1")) {
// filterChain.doFilter(servletRequest, servletResponse);
// filterChain.doFilter(servletRequest, servletResponse);
...
@@ -117,7 +124,7 @@ public class IpLimitFilter implements Filter {
...
@@ -117,7 +124,7 @@ public class IpLimitFilter implements Filter {
}
}
private
boolean
isInExtranet
(
String
clientIp
)
{
private
boolean
isInExtranet
(
String
clientIp
)
{
for
(
String
extranetIp
:
extranetIps
)
{
for
(
String
extranetIp
:
ipLimiterProperties
.
getExtranetIps
()
)
{
if
(
clientIp
.
startsWith
(
extranetIp
))
{
if
(
clientIp
.
startsWith
(
extranetIp
))
{
return
true
;
return
true
;
}
}
...
@@ -129,4 +136,4 @@ public class IpLimitFilter implements Filter {
...
@@ -129,4 +136,4 @@ public class IpLimitFilter implements Filter {
public
void
destroy
()
{
public
void
destroy
()
{
}
}
}
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment