Procházet zdrojové kódy

fix: Redis 读取停车券 URL 时清洗 NULL 字节序列化污染

PARKING_COUPON_CODE 中存储的 URL 前面被填充了大量 \x00 字节,
导致字符串长度膨胀到 7274 字符。在读取时查找 "http" 起始位置
截断垃圾数据,只保留有效 URL。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
skyline před 18 hodinami
rodič
revize
1c0f4188fc

+ 16 - 2
car-wash-service/src/main/java/com/kym/service/cache/KymCache.java

@@ -116,7 +116,8 @@ public enum KymCache {
      * @return
      */
     public String getParkingQrCodeUrlByStationId(String stationId) {
-        return KymCacheInjector.redisTemplate.opsForValue().get(RedisKeys.STATION_ID_TO_PARKING_QR_CODE_URL + stationId);
+        var url = KymCacheInjector.redisTemplate.opsForValue().get(RedisKeys.STATION_ID_TO_PARKING_QR_CODE_URL + stationId);
+        return cleanNullBytes(url);
     }
 
 
@@ -223,7 +224,20 @@ public enum KymCache {
     }
 
     public String getParkingCouponUrl(String code) {
-        return KymCacheInjector.redisTemplate.opsForValue().get(RedisKeys.PARKING_COUPON_CODE + code);
+        var url = KymCacheInjector.redisTemplate.opsForValue().get(RedisKeys.PARKING_COUPON_CODE + code);
+        return cleanNullBytes(url);
+    }
+
+    private static String cleanNullBytes(String value) {
+        if (value == null || value.isEmpty()) {
+            return value;
+        }
+        // 移除 NULL 字节及其之前的所有垃圾数据,只保留有效 URL
+        int idx = value.indexOf("http");
+        if (idx > 0) {
+            return value.substring(idx);
+        }
+        return value;
     }