如何使用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