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"); + } }