From bb8f6d27f19c6d2afb9d3994851de1b0a57e6552 Mon Sep 17 00:00:00 2001 From: sdw086 Date: Tue, 10 Mar 2026 16:49:27 +0900 Subject: [PATCH] =?UTF-8?q?[File]=20=EB=A1=9C=EC=BB=AC=EC=97=90=EC=84=9C?= =?UTF-8?q?=20->=20api=EC=84=9C=EB=B2=84=EC=97=90=EC=84=9C=20=EB=8B=A4?= =?UTF-8?q?=EC=9A=B4=EB=A1=9C=EB=93=9C=20=EA=B0=80=EB=8A=A5=ED=95=98?= =?UTF-8?q?=EA=B2=8C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/modules/file/FileController.java | 4 ++-- .../modules/file/service/FileService.java | 20 +++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/alist/api/common/modules/file/FileController.java b/src/main/java/com/alist/api/common/modules/file/FileController.java index 9353493..70e7cce 100644 --- a/src/main/java/com/alist/api/common/modules/file/FileController.java +++ b/src/main/java/com/alist/api/common/modules/file/FileController.java @@ -200,7 +200,7 @@ public class FileController { return ResponseEntity.notFound().build(); } - if (fileService.isRedirectMode()) { + if (fileService.isRedirectMode() || fileService.isLocalTestRequest(request)) { return ResponseEntity.status(HttpStatus.FOUND) .location(URI.create(fileService.buildPublicViewUrl(target.getSavePath()))) .build(); @@ -240,7 +240,7 @@ public class FileController { return ResponseEntity.notFound().build(); } - if (fileService.isRedirectMode()) { + if (fileService.isRedirectMode() || fileService.isLocalTestRequest(request)) { return ResponseEntity.status(HttpStatus.FOUND) .location(URI.create(fileService.buildPublicDownloadUrl(target.getSavePath()))) .build(); diff --git a/src/main/java/com/alist/api/common/modules/file/service/FileService.java b/src/main/java/com/alist/api/common/modules/file/service/FileService.java index 18cbefc..9eb5685 100644 --- a/src/main/java/com/alist/api/common/modules/file/service/FileService.java +++ b/src/main/java/com/alist/api/common/modules/file/service/FileService.java @@ -3,6 +3,7 @@ package com.alist.api.common.modules.file.service; import com.alist.api.common.modules.file.dto.*; import com.alist.api.common.modules.file.mapper.FileMapper; import com.alist.api.config.jwt.JwtTokenProvider; +import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.core.HashOperations; @@ -695,4 +696,23 @@ public class FileService { return baseUrl + prefix + savePath; } + + public boolean isLocalTestRequest(HttpServletRequest request) { + return containsLocalhost(request.getHeader("Referer")) + || containsLocalhost(request.getHeader("Origin")) + || containsLocalhost(request.getHeader("Host")) + || containsLocalhost(request.getHeader("X-Forwarded-Host")); + } + + public boolean containsLocalhost(String value) { + if (value == null || value.isBlank()) { + return false; + } + + String lower = value.toLowerCase(); + return lower.contains("localhost") + || lower.contains("127.0.0.1") + || lower.contains("[::1]") + || lower.contains("::1"); + } }