我有一个Spring Boot Web应用程序,我想在我的Linode VPS(〜/ Dropbox / images)上的共享Dropbox目录中提供静态内容。我已经读过Spring Boot将自动提供来自
的静态内容"classpath:/META-INF/resources/",
"classpath:/resources/",
"classpath:/static/",
"classpath:/public/",
但当然我的Dropbox目录不在类路径上。
虽然我可以配置Apache来提供Dropbox文件夹中的图像,但我希望利用Spring Security来限制静态内容对经过身份验证的用户的访问。
答案 0 :(得分:61)
您可以添加自己的静态资源处理程序(它会覆盖默认值),例如
@Configuration
public class StaticResourceConfiguration extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations("file:/path/to/my/dropbox/");
}
}
在Spring Boot中有一些关于此的文档,但它实际上只是一个普通的Spring MVC功能。
此外,自春季启动1.2(我认为),您只需设置spring.resources.staticLocations
。
答案 1 :(得分:31)
Springboot(通过Spring)现在可以轻松地添加到现有资源处理程序。见Dave Syers answer。要添加到现有的静态资源处理程序,只需确保使用不覆盖现有路径的资源处理程序路径。
以下两个“也”注释仍然有效。
。 。
[编辑:以下方法不再有效]
如果你想扩展默认的静态资源处理程序,那么这样的东西似乎有效:
@Configuration
@AutoConfigureAfter(DispatcherServletAutoConfiguration.class)
public class CustomWebMvcAutoConfig extends
WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
String myExternalFilePath = "file:///C:/Temp/whatever/m/";
registry.addResourceHandler("/m/**").addResourceLocations(myExternalFilePath);
super.addResourceHandlers(registry);
}
}
对super.addResourceHandlers
的调用会设置默认处理程序。
此外:
答案 2 :(得分:19)
根据@Dave Syers的回答,我将以下类添加到Spring Boot项目中:
@Configuration
public class StaticResourceConfiguration extends WebMvcConfigurerAdapter {
private static final Logger LOG = LoggerFactory.getLogger(StaticResourceConfiguration.class);
@Value("${static.path}")
private String staticPath;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
if(staticPath != null) {
LOG.info("Serving static content from " + staticPath);
registry.addResourceHandler("/**").addResourceLocations("file:" + staticPath);
}
}
// see https://stackoverflow.com/questions/27381781/java-spring-boot-how-to-map-my-my-app-root-to-index-html
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("redirect:/index.html");
}
}
这允许我使用参数--static.path
开始我的春季启动应用程序
java -jar spring-app-1.0-SNAPSHOT.jar --static.path=/path/to/my/static-files/
这对于开发和测试非常方便。
答案 3 :(得分:7)
可以在spring.resources.staticLocations
中设置属性application.properties
。请注意,这将覆盖默认位置。请参阅org.springframework.boot.autoconfigure.web.ResourceProperties
。
答案 4 :(得分:3)
@MarkSchäfer
永远不会太晚,但在静态之后添加斜杠(/
):
spring.resources.static-locations=file:/opt/x/y/z/static/
现在可以访问http://<host>/index.html
。
答案 5 :(得分:2)
基于@Dave Syer,@ kaliatech和@asmaier回答springboot v2 +的方式将是:
@Configuration
@AutoConfigureAfter(DispatcherServletAutoConfiguration.class)
public class StaticResourceConfiguration implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
String myExternalFilePath = "file:///C:/temp/whatever/m/";
registry.addResourceHandler("/m/**").addResourceLocations(myExternalFilePath);
}
}
答案 6 :(得分:1)
对于当前的Spring-Boot版本1.5.3,参数为
spring.resources.static-locations
<强>更新强> 我配置了
`spring.resources.static-位置=文件中:/ opt / X / Y / Z / static``
并希望在调用
时让我的index.html生活在此文件夹中 http://<host>/index.html
这不起作用。我必须在URL中包含文件夹名称:
http://<host>/static/index.html
答案 7 :(得分:1)
从文件系统提供服务
我在spring.resources.static-location=file:../frontend/build
application.properties
index.html
出现在build
文件夹
使用也可以添加绝对路径
spring.resources.static-location=file:/User/XYZ/Desktop/frontend/build
我认为您可以尝试添加Dropbox文件夹路径。
答案 8 :(得分:1)
FWIW,我在上面推荐的spring.resources.static-locations
上没有取得任何成功;对我有用的是设置spring.thymeleaf.prefix:
report.location=file:/Users/bill/report/html/
spring.thymeleaf.prefix=${report.location}
答案 9 :(得分:1)
请注意,WebMvcConfigurerAdapter现已弃用(请参阅WebMvcConfigurerAdapter)。由于Java 8默认方法,您只需实现WebMvcConfigurer。
答案 10 :(得分:0)
我想从c:/ images提供静态内容
添加此属性对我有用:
spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,file:///C:/images/
我在Spring Boot Doc Appendix A中找到了该属性的原始值
这将使c:/images/image.jpg可以以http://localhost:8080/image.jpg的方式访问
答案 11 :(得分:0)
您可以将文件夹放置在ServletContext的根目录中。
然后在application.yml中指定此目录的相对或绝对路径:
spring:
resources:
static-locations: file:some_temp_files/
该文件夹中的资源将在以下位置可用(例如,用于下载):
http://<host>:<port>/<context>/your_file.csv