Files
YschcmsService/src/main/java/com/yunhai/cms/config/WebConfig.java
T
2026-09-07 09:09:39 +08:00

57 lines
2.4 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package com.yunhai.cms.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.ForwardedHeaderFilter;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.io.File;
/**
* Web 静态资源装配。
*
* <ul>
* <li>{@code /upload/**} → FILE_PATH 本地磁盘(正文图片/轮播图/友链 Logo,双 key 约定方案 §7.3);</li>
* <li>{@code /admin/**} → 管理端 SPA(front 构建产物拷入 classpath:/static/admin/,
* hash 路由 + 相对 base,天然支持子路径部署);</li>
* <li>根路径与 /admin 跳管理端入口。</li>
* </ul>
* 门户主题资产不在此处:按站点皮肤包解析,见 PortalAssetController。
*/
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Value("${FILE_PATH:./upload/}")
private String filePath;
/**
* X-Forwarded-Proto/Host/Port 头处理(B-2):反代(Caddy/nginx)形态下
* request.getScheme()/getServerName()/getServerPort() 修正为对外值,
* 使 public_base_url/base-origin 均未配置时的请求派生 URL 不携带内网 scheme/端口。
* 仅应在可信反代之后部署(直连暴露时该头可伪造,只影响派生形态展示,不影响数据)。
*/
@Bean
public ForwardedHeaderFilter forwardedHeaderFilter() {
return new ForwardedHeaderFilter();
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
String root = filePath.endsWith("/") || filePath.endsWith("\\") ? filePath : filePath + "/";
registry.addResourceHandler("/upload/**")
.addResourceLocations("file:" + new File(root).getAbsolutePath().replace('\\', '/') + "/");
registry.addResourceHandler("/admin/**")
.addResourceLocations("classpath:/static/admin/");
}
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addRedirectViewController("/", "/admin/index.html");
registry.addRedirectViewController("/admin", "/admin/index.html");
registry.addRedirectViewController("/admin/", "/admin/index.html");
}
}