如何使用Spring Boot提供位于Dropbox文件夹中的静态内容?

我有一个Spring Boot Web应用程序,我想提供位于我的Linode VPS(〜/ Dropbox / images)上的共享Dropbox目录中的静态内容。 我读过Spring Boot会自动提供静态内容

"classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/", 

但我的Dropbox目录当然不在类path中。

尽pipe我可以configurationApache来为我的Dropbox文件夹中的图像提供服务,但是我想利用Spring Security来限制静态内容对已authentication用户的访问。

您可以添加自己的静态资源处理程序(它会覆盖默认值),例如

 @Configuration public class StaticResourceConfiguration extends WebMvcConfigurerAdapter { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/**").addResourceLocations("file:/path/to/my/dropbox/"); } } 

在Spring Boot中有一些关于这个的文档,但它实际上只是一个Spring MVCfunction。

另外,从春季启动1.2(我认为),你可以简单地设置spring.resources.staticLocations

Springboot(通过Spring)现在可以轻松地添加到现有的资源处理程序中。 见Dave Syers的回答 。 要添加到现有的静态资源处理程序,只需确保使用不覆盖现有path的资源处理程序path。

下面的两个“也”注释仍然有效。

。 。 。

[编辑:下面的方法不再有效]

如果你想扩展默认的静态资源处理程序,那么类似这样的东西似乎工作:

 @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的调用设置了默认的处理程序。

也:

  • 请注意外部文件path上的斜线。 (取决于您对URL映射的期望)。
  • 考虑查看WebMvcAutoConfigurationAdapter的源代码。

基于@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来启动我的spring启动应用程序

 java -jar spring-app-1.0-SNAPSHOT.jar --static.path=/path/to/my/static-files/ 

这对于开发和testing非常方便。

有一个属性spring.resources.staticLocations可以在application.properties设置。 请注意,这将覆盖默认位置。 请参阅org.springframework.boot.autoconfigure.web.ResourceProperties

对于当前的Spring-Boot版本1.5.3,参数是

spring.resources.static-locations

更新我configuration

`spring.resources.static-位置=文件中:/ opt / X / Y / Z / static“

并期望在拨打电话时让我的index.html生活在这个文件夹中

http://<host>/index.html

这没有奏效。 我不得不在URL中包含文件夹名称

http://<host>/static/index.html