diff --git a/src/main/java/io/github/xxyopen/novel/core/config/WebConfig.java b/src/main/java/io/github/xxyopen/novel/core/config/WebConfig.java index 498cdc4..80217b2 100644 --- a/src/main/java/io/github/xxyopen/novel/core/config/WebConfig.java +++ b/src/main/java/io/github/xxyopen/novel/core/config/WebConfig.java @@ -1,7 +1,9 @@ package io.github.xxyopen.novel.core.config; import io.github.xxyopen.novel.core.constant.ApiRouterConsts; +import io.github.xxyopen.novel.core.constant.SystemConfigConsts; import io.github.xxyopen.novel.core.interceptor.AuthInterceptor; +import io.github.xxyopen.novel.core.interceptor.FileInterceptor; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; @@ -19,11 +21,18 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @RequiredArgsConstructor public class WebConfig implements WebMvcConfigurer { - private final AuthInterceptor frontAuthInterceptor; + private final AuthInterceptor authInterceptor; + + private final FileInterceptor fileInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { - registry.addInterceptor(frontAuthInterceptor) + // 文件访问拦截 + registry.addInterceptor(fileInterceptor) + .addPathPatterns(SystemConfigConsts.IMAGE_UPLOAD_DIRECTORY + "**"); + + // 权限认证拦截 + registry.addInterceptor(authInterceptor) // 拦截会员中心相关请求接口 .addPathPatterns(ApiRouterConsts.API_FRONT_USER_URL_PREFIX + "/**" // 拦截作家后台相关请求接口 @@ -35,5 +44,6 @@ public class WebConfig implements WebMvcConfigurer { , ApiRouterConsts.API_FRONT_USER_URL_PREFIX + "/login" , ApiRouterConsts.API_AUTHOR_URL_PREFIX + "/register" ,ApiRouterConsts.API_ADMIN_URL_PREFIX + "/login"); + } } diff --git a/src/main/java/io/github/xxyopen/novel/core/interceptor/FileInterceptor.java b/src/main/java/io/github/xxyopen/novel/core/interceptor/FileInterceptor.java new file mode 100644 index 0000000..8584815 --- /dev/null +++ b/src/main/java/io/github/xxyopen/novel/core/interceptor/FileInterceptor.java @@ -0,0 +1,43 @@ +package io.github.xxyopen.novel.core.interceptor; + +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.HandlerInterceptor; + +import java.io.FileInputStream; +import java.io.InputStream; +import java.io.OutputStream; + +/** + * 文件 拦截器 + * + * @author xiongxiaoyang + * @date 2022/5/22 + */ +@Component +@RequiredArgsConstructor +public class FileInterceptor implements HandlerInterceptor { + + @Value("${novel.file.upload.path}") + private String fileUploadPath; + + @SuppressWarnings("NullableProblems") + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + // 获取请求的 URI + String requestUri = request.getRequestURI(); + // 缓存10天 + response.setDateHeader("expires", System.currentTimeMillis() + 60 * 60 * 24 * 10 * 1000); + try (OutputStream out = response.getOutputStream();InputStream input = new FileInputStream(fileUploadPath + requestUri)) { + byte[] b = new byte[4096]; + for (int n; (n = input.read(b)) != -1; ) { + out.write(b, 0, n); + } + } + return false; + } + +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 0dd1cc8..2de10a4 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -65,7 +65,7 @@ novel: # 文件上传配置 upload: # 上传路径 - path: /var/upload + path: /Users/xiongxiaoyang/upload