Commit 0bc52701 authored by 李文彬's avatar 李文彬

feat(*): IP 白名单设置启用开关

parent fc49f055
......@@ -45,6 +45,7 @@
<maven.test.skip>true</maven.test.skip>
<org.springframework.security.version>3.2.7.RELEASE</org.springframework.security.version>
<jackson.version>2.13.1</jackson.version>
<dingtalk.sdk.version>2.1.42</dingtalk.sdk.version>
</properties>
<dependencies>
......@@ -367,6 +368,12 @@
<artifactId>caffeine</artifactId>
<version>2.9.3</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dingtalk</artifactId>
<version>${dingtalk.sdk.version}</version>
</dependency>
</dependencies>
<build>
......
package cn.quantgroup.xyqb.controller.api.v2;
import cn.quantgroup.xyqb.model.JsonResult;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Objects;
/**
* @author hyuk
*/
@Slf4j
@RequiredArgsConstructor
@RestController
@RequestMapping("/ip/limit")
public class IpLimitController {
private final StringRedisTemplate stringRedisTemplate;
private static final String TOKEN = "8n7y5y9UaKIOFqox";
public static final String IP_LIMIT_STATUS_KEY = "xyqb_user:01:ip_limit_status:m10z";
@GetMapping("/current-status/{token}")
public JsonResult<String> getCurrentStatus(@PathVariable String token) {
if (!Objects.equals(TOKEN, token)) {
return JsonResult.buildErrorStateResult("非法访问", null);
}
String status = stringRedisTemplate.opsForValue().get(IP_LIMIT_STATUS_KEY);
if (StringUtils.isEmpty(status)) {
status = "1";
}
return JsonResult.buildSuccessResult("success", status);
}
@GetMapping("/status/set/{token}/{status}")
public JsonResult<String> setStatus(@PathVariable String token, @PathVariable String status) {
if (!Objects.equals(TOKEN, token)) {
return JsonResult.buildErrorStateResult("非法访问", null);
}
if (!Objects.equals(status, "1") && !Objects.equals(status, "0")) {
return JsonResult.buildErrorStateResult("非法访问", null);
}
stringRedisTemplate.opsForValue().set(IP_LIMIT_STATUS_KEY, status);
return JsonResult.buildSuccessResult("success", status);
}
}
......@@ -20,8 +20,11 @@ import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
import static cn.quantgroup.xyqb.controller.api.v2.IpLimitController.IP_LIMIT_STATUS_KEY;
/**
* @author hyuk
*/
......@@ -73,7 +76,12 @@ public class IpLimitFilter implements Filter {
return;
}
log.info("[IpLimitFilter]外网调用, clientIp : {}, uri : {}", clientIp, request.getRequestURI());
String status = stringRedisTemplate.opsForValue().get(IP_LIMIT_STATUS_KEY);
if (status == null || Objects.equals(status, "1")) {
filterChain.doFilter(servletRequest, servletResponse);
} else {
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
}
return;
// try {
// // 1. 一天内请求多少次
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment