From 9b4433fddf5b401edb0aace8a404ac733b122702 Mon Sep 17 00:00:00 2001
From: 田源 <tianyuan@vci-tech.com>
Date: 星期四, 03 四月 2025 14:35:02 +0800
Subject: [PATCH] 添加非密字段显示
---
Source/BladeX-Tool/blade-starter-redis/src/main/java/org/springblade/core/redis/ratelimiter/RedisRateLimiterClient.java | 83 +++++++++++++++++++++++++++++++++++++++++
1 files changed, 83 insertions(+), 0 deletions(-)
diff --git a/Source/BladeX-Tool/blade-starter-redis/src/main/java/org/springblade/core/redis/ratelimiter/RedisRateLimiterClient.java b/Source/BladeX-Tool/blade-starter-redis/src/main/java/org/springblade/core/redis/ratelimiter/RedisRateLimiterClient.java
new file mode 100644
index 0000000..5e7bd94
--- /dev/null
+++ b/Source/BladeX-Tool/blade-starter-redis/src/main/java/org/springblade/core/redis/ratelimiter/RedisRateLimiterClient.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 2018-2028, DreamLu All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * Neither the name of the dreamlu.net developer nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ * Author: DreamLu 鍗㈡槬姊� (596392912@qq.com)
+ */
+
+package org.springblade.core.redis.ratelimiter;
+
+import lombok.RequiredArgsConstructor;
+import org.springblade.core.tool.utils.CharPool;
+import org.springframework.core.env.Environment;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.data.redis.core.script.RedisScript;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * redis 闄愭祦鏈嶅姟
+ *
+ * @author dream.lu
+ */
+@RequiredArgsConstructor
+public class RedisRateLimiterClient implements RateLimiterClient {
+ /**
+ * redis 闄愭祦 key 鍓嶇紑
+ */
+ private static final String REDIS_KEY_PREFIX = "limiter:";
+ /**
+ * 澶辫触鐨勯粯璁よ繑鍥炲��
+ */
+ private static final long FAIL_CODE = 0;
+ /**
+ * redisTemplate
+ */
+ private final StringRedisTemplate redisTemplate;
+ /**
+ * redisScript
+ */
+ private final RedisScript<List<Long>> script;
+ /**
+ * env
+ */
+ private final Environment environment;
+
+ @Override
+ public boolean isAllowed(String key, long max, long ttl, TimeUnit timeUnit) {
+ // redis key
+ String redisKeyBuilder = REDIS_KEY_PREFIX +
+ getApplicationName(environment) + CharPool.COLON + key;
+ List<String> keys = Collections.singletonList(redisKeyBuilder);
+ // 姣锛岃�冭檻涓讳粠绛栫暐鍜岃剼鏈洖鏀炬満鍒讹紝杩欎釜time鐢卞鎴风鑾峰彇浼犲叆
+ long now = System.currentTimeMillis();
+ // 杞负姣锛宲expire
+ long ttlMillis = timeUnit.toMillis(ttl);
+ // 鎵ц鍛戒护
+ List<Long> results = this.redisTemplate.execute(this.script, keys, max + "", ttlMillis + "", now + "");
+ // 缁撴灉涓虹┖杩斿洖澶辫触
+ if (results == null || results.isEmpty()) {
+ return false;
+ }
+ // 鍒ゆ柇杩斿洖鎴愬姛
+ Long result = results.get(0);
+ return result != FAIL_CODE;
+ }
+
+ private static String getApplicationName(Environment environment) {
+ return environment.getProperty("spring.application.name", "");
+ }
+
+}
--
Gitblit v1.9.3