From 879ca68b5af44b9cced14e2ad9acc06119dcaf7c Mon Sep 17 00:00:00 2001 From: Naccl Date: Thu, 16 Sep 2021 15:29:24 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=A2=9E=E5=8A=A0=E8=AF=B7=E6=B1=82?= =?UTF-8?q?=E9=A2=91=E7=8E=87=E9=99=90=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 17 ++++- pom.xml | 5 ++ snapshoot2.png | Bin 0 -> 76670 bytes .../top/naccl/dwz/annotation/AccessLimit.java | 30 ++++++++ .../java/top/naccl/dwz/config/WebConfig.java | 23 ++++++ .../naccl/dwz/controller/IndexController.java | 2 + .../interceptor/AccessLimitInterceptor.java | 68 ++++++++++++++++++ .../top/naccl/dwz/util/IpAddressUtils.java | 54 ++++++++++++++ .../java/top/naccl/dwz/util/JacksonUtils.java | 57 +++++++++++++++ 9 files changed, 255 insertions(+), 1 deletion(-) create mode 100644 snapshoot2.png create mode 100644 src/main/java/top/naccl/dwz/annotation/AccessLimit.java create mode 100644 src/main/java/top/naccl/dwz/config/WebConfig.java create mode 100644 src/main/java/top/naccl/dwz/interceptor/AccessLimitInterceptor.java create mode 100644 src/main/java/top/naccl/dwz/util/IpAddressUtils.java create mode 100644 src/main/java/top/naccl/dwz/util/JacksonUtils.java diff --git a/README.md b/README.md index d72747b..c40a5df 100644 --- a/README.md +++ b/README.md @@ -26,4 +26,19 @@ base62:MurmurHash 生成的哈希值最长有 10 位十进制数,为了进 Redis:生成短链接后,通常在后续一段时间内此短链接的使用频率较高,则向 Redis 中添加带过期时间的缓存来减轻数据库压力。 -302 状态码:301 为永久重定向、302 为临时重定向,通常需要记录短链接访问次数或需要修改、删除短链接时,使用 302 临时重定向来处理,和服务器压力相比,数据的价值往往更大。 \ No newline at end of file +302 状态码:301 为永久重定向、302 为临时重定向,通常需要记录短链接访问次数或需要修改、删除短链接时,使用 302 临时重定向来处理,和服务器压力相比,数据的价值往往更大。 + + + +## 声明 + +本在线网站只用于项目展示,随时可能关闭,并不保证绝对的可用性,切勿用于商业用途或非法传播,因此产生的任何纠纷与本人无关。 + +近期服务器即将到期,正在迁移服务器数据,发现有一些异常的数据: + +![](./snapshoot2.png) + +我不知道是测试或是什么用途(不止这一类URL),还是很感谢这个频率😋,决定加上请求频率限制。 + +由于最近迁移服务器,将会丢失部分数据(镜像打的早,DNS 解析 TTL)。 + diff --git a/pom.xml b/pom.xml index 284b7b9..91b9f9e 100644 --- a/pom.xml +++ b/pom.xml @@ -62,6 +62,11 @@ spring-boot-starter-test test + + org.apache.commons + commons-lang3 + 3.11 + diff --git a/snapshoot2.png b/snapshoot2.png new file mode 100644 index 0000000000000000000000000000000000000000..56722aac728d5e02f14f1db91e1e6ecf26aae97d GIT binary patch literal 76670 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 z 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 maxCount) { + //超出访问限制次数 + response.setContentType("application/json;charset=utf-8"); + PrintWriter out = response.getWriter(); + R result = R.create(403, accessLimit.msg()); + out.write(JacksonUtils.writeValueAsString(result)); + out.flush(); + out.close(); + return false; + } else { + //没超出访问限制次数 + redisTemplate.opsForValue().increment(redisKey, 1); + } + } + } + return true; + } +} diff --git a/src/main/java/top/naccl/dwz/util/IpAddressUtils.java b/src/main/java/top/naccl/dwz/util/IpAddressUtils.java new file mode 100644 index 0000000..041a1a6 --- /dev/null +++ b/src/main/java/top/naccl/dwz/util/IpAddressUtils.java @@ -0,0 +1,54 @@ +package top.naccl.dwz.util; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.apache.commons.lang3.StringUtils; + +import javax.servlet.http.HttpServletRequest; +import java.net.InetAddress; +import java.net.UnknownHostException; + +/** + * @Description: ip记录 + * @Author: Naccl + * @Date: 2020-08-18 + */ +@Slf4j +@Component +public class IpAddressUtils { + /** + * 在Nginx等代理之后获取用户真实IP地址 + * + * @param request + * @return + */ + public static String getIpAddress(HttpServletRequest request) { + String ip = request.getHeader("x-forwarded-for"); + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_CLIENT_IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_X_FORWARDED_FOR"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + if ("127.0.0.1".equals(ip) || "0:0:0:0:0:0:0:1".equals(ip)) { + //根据网卡取本机配置的IP + InetAddress inet = null; + try { + inet = InetAddress.getLocalHost(); + } catch (UnknownHostException e) { + log.error("getIpAddress exception:", e); + } + ip = inet.getHostAddress(); + } + } + return StringUtils.substringBefore(ip, ","); + } +} \ No newline at end of file diff --git a/src/main/java/top/naccl/dwz/util/JacksonUtils.java b/src/main/java/top/naccl/dwz/util/JacksonUtils.java new file mode 100644 index 0000000..5fb90d0 --- /dev/null +++ b/src/main/java/top/naccl/dwz/util/JacksonUtils.java @@ -0,0 +1,57 @@ +package top.naccl.dwz.util; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; + +import java.io.IOException; +import java.io.InputStream; + +/** + * @Description: Jackson Object Mapper + * @Author: Naccl + * @Date: 2020-11-07 + */ +public class JacksonUtils { + private static ObjectMapper objectMapper = new ObjectMapper(); + + public static String writeValueAsString(Object value) { + try { + return objectMapper.writeValueAsString(value); + } catch (JsonProcessingException e) { + e.printStackTrace(); + return ""; + } + } + + public static T readValue(String content, Class valueType) { + try { + return objectMapper.readValue(content, valueType); + } catch (IOException e) { + e.printStackTrace(); + return null; + } + } + + public static T readValue(String content, TypeReference valueTypeRef) { + try { + return objectMapper.readValue(content, valueTypeRef); + } catch (IOException e) { + e.printStackTrace(); + return null; + } + } + + public static T readValue(InputStream src, Class valueType) { + try { + return objectMapper.readValue(src, valueType); + } catch (IOException e) { + e.printStackTrace(); + return null; + } + } + + public static T convertValue(Object fromValue, Class toValueType) { + return objectMapper.convertValue(fromValue, toValueType); + } +}