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 .