У меня есть веб-приложение Начальной загрузки Spring, и я хотел бы служить статическому содержанию, расположенному в общем каталоге Dropbox на моем Linode VPS (~/Dropbox/images). Я читал, та Начальная загрузка Spring будет автоматически обслуживать статическое содержание от
"classpath:/META-INF/resources/",
"classpath:/resources/",
"classpath:/static/",
"classpath:/public/",
но конечно мой каталог Dropbox не находится на пути к классу.
Хотя я мог настроить Apache для обслуживания изображений в моей папке Dropbox, я хотел бы использовать в своих интересах безопасность Spring для ограничения доступа статического содержания аутентифицируемым пользователям.
Можно добавить собственный статический обработчик ресурсов (он перезаписывает значение по умолчанию), например,
@Configuration
public class StaticResourceConfiguration extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations("file:/path/to/my/dropbox/");
}
}
существует некоторая документация об этом в Начальная загрузка Spring , но это - действительно просто ванильная функция Spring MVC.
Также начиная с пружинной начальной загрузки 1.2 (я думаю) можно просто установить spring.resources.staticLocations
.
я хотел служить статическому содержанию от c:/images
, Добавляющего, что это свойство работало на меня:
spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,file:///C:/images/
я нашел исходное значение свойства в Приложении A
Документа Начальной загрузки Spring, Это сделает c:/images/image.jpg, чтобы быть доступным как http://localhost:8080/image.jpg
Обратите внимание, что WebMvcConfigurerAdapter удерживается от использования теперь (см. WebMvcConfigurerAdapter). Из-за методов значения по умолчанию Java 8, только необходимо реализовать WebMvcConfigurer.
Для текущей Загрузочной версии Spring 1.5.3 параметр
spring.resources.static-locations
Обновление , я настроил
'spring.resources.static-locations=file:/opt/x/y/z/static''
и ожидал получать свой index.html, живущий в этой папке при вызове
http://<host>/index.html
, Это не работало. Я должен был включать имя папки в URL:
http://<host>/static/index.html
Для обслуживания от файловой системы
, я добавил spring.resources.static-location=file:../frontend/build
в application.properties
index.html
, присутствует в build
папка
, Использование может также добавить полный путь
spring.resources.static-location=file:/User/XYZ/Desktop/frontend/build
, я думаю так же, что можно попытаться добавить путь к папке Dropbox.
FWIW, я не имел никакого успеха с эти spring.resources.static-locations
рекомендуемый выше; то, что работало на меня, устанавливало spring.thymeleaf.prefix:
report.location=file:/Users/bill/report/html/
spring.thymeleaf.prefix=${report.location}
@Mark Schäfer
Никогда слишком поздно, но добавляют наклонную черту (/
) после помех:
spring.resources.static-locations=file:/opt/x/y/z/static/
Так http://<host>/index.html
теперь достижимо.
На основе @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);
}
}
Существует свойство spring.resources.staticLocations
, которое может быть установлено в application.properties
. Обратите внимание, что это переопределит местоположения по умолчанию. См. org.springframework.boot.autoconfigure.web.ResourceProperties
.
На основе @Dave Syers отвечают, что я добавляю следующий класс к своему проекту Начальной загрузки Spring:
@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/
, Это может быть очень удобно для разработки и тестирования.
Springboot (через Spring) теперь делает добавление к существующим обработчикам ресурсов легким. См. ответ Dave Syers . Добавить к существующим статическим обработчикам ресурсов, просто убедиться использовать путь обработчика ресурсов, который не переопределяет существующие пути.
два "также" примечания ниже все еще действительны.
...
[Редактирование: подход ниже больше не действителен]
, Если Вы хотите к , расширяются статические обработчики ресурсов по умолчанию, затем что-то вроде этого, кажется, работает:
@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
настраивает обработчики по умолчанию.
Также: