una tener solo puede publico link lectura enlace cuenta crear con compartir compartido como carpetas carpeta abrir apache spring-mvc dropbox static-content spring-boot

apache - tener - ¿Cómo uso Spring Boot para servir contenido estático ubicado en la carpeta de Dropbox?



enlace publico dropbox (9)

Tengo una aplicación web Spring Boot, y me gustaría servir contenido estático ubicado en un directorio compartido de Dropbox en mi Linode VPS (~ / Dropbox / images). He leído que Spring Boot automáticamente servirá contenido estático de

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

pero, por supuesto, mi directorio de Dropbox no está en el classpath.

Aunque podría configurar Apache para que sirva las imágenes en mi carpeta de Dropbox, me gustaría aprovechar Spring Security para restringir el acceso del contenido estático a los usuarios autenticados.


@Mark Schäfer

Nunca es demasiado tarde, pero agregue una barra ( / ) después de la estática:

spring.resources.static-locations=file:/opt/x/y/z/static/

Así que ahora se puede http://<host>/index.html .


Basado en la respuesta de @Dave Syers, agrego la siguiente clase a mi proyecto 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://.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"); } }

Esto me permite comenzar mi aplicación de arranque de primavera con el parámetro --static.path como

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

Esto puede ser muy útil para el desarrollo y las pruebas.


FWIW, no tuve ningún éxito con spring.resources.static-locations recomendado arriba; lo que funcionó para mí fue establecer spring.thymeleaf.prefix:

report.location=file:/Users/bill/report/html/ spring.thymeleaf.prefix=${report.location}


Hay una propiedad spring.resources.staticLocations que se puede establecer en application.properties . Tenga en cuenta que esto anulará las ubicaciones predeterminadas. Consulte org.springframework.boot.autoconfigure.web.ResourceProperties .


Para la versión actual de Spring-Boot 1.5.3, el parámetro es

spring.resources.static-locations

Actualizar configuré

`spring.resources.static-locations = file: / opt / x / y / z / static``

y esperaba obtener mi index.html viviendo en esta carpeta cuando llamas

http://<host>/index.html

Esto no funcionó. Tuve que incluir el nombre de la carpeta en la URL:

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


Para servir desde el sistema de archivos

spring.resources.static-location=file:../frontend/build en application.properties

index.html está presente en la carpeta de build

El uso también puede agregar una ruta absoluta

spring.resources.static-location=file:/User/XYZ/Desktop/frontend/build

Creo que de manera similar puedes intentar agregar la ruta de la carpeta de Dropbox.


Puede agregar su propio manejador de recursos estáticos (sobrescribe el predeterminado), por ej.

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

Hay algo de documentación sobre esto en Spring Boot , pero en realidad es solo una característica de Spring MVC.

También desde el arranque de primavera 1.2 (creo) simplemente puede establecer spring.resources.staticLocations .


Springboot (a través de Spring) ahora facilita la adición a los manejadores de recursos existentes. Ver la respuesta de Dave Syers . Para agregar a los manejadores de recursos estáticos existentes, simplemente asegúrese de usar una ruta de controlador de recursos que no anule las rutas existentes.

Las dos notas "también" a continuación siguen siendo válidas.

. . .

[Editar: El enfoque a continuación ya no es válido]

Si desea extender los manejadores de recursos estáticos predeterminados, entonces algo como esto parece funcionar:

@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); } }

La llamada a super.addResourceHandlers configura los controladores predeterminados.

También:

  • Tenga en cuenta la barra inclinada en la ruta del archivo externo. (Depende de su expectativa de mapeos de URL).
  • Considere revisar el código fuente de WebMvcAutoConfigurationAdapter .

Tenga en cuenta que WebMvcConfigurerAdapter está en desuso en este momento (consulte WebMvcConfigurerAdapter ). Debido a los métodos por defecto de Java 8, solo tiene que implementar WebMvcConfigurer .