Как я использую Начальную загрузку Spring для обслуживания статического содержания, расположенного в папке Dropbox?

У меня есть веб-приложение Начальной загрузки Spring, и я хотел бы служить статическому содержанию, расположенному в общем каталоге Dropbox на моем Linode VPS (~/Dropbox/images). Я читал, та Начальная загрузка Spring будет автоматически обслуживать статическое содержание от

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

но конечно мой каталог Dropbox не находится на пути к классу.

Хотя я мог настроить Apache для обслуживания изображений в моей папке Dropbox, я хотел бы использовать в своих интересах безопасность Spring для ограничения доступа статического содержания аутентифицируемым пользователям.

62
задан 15 January 2014 в 00:33

11 ответов

Можно добавить собственный статический обработчик ресурсов (он перезаписывает значение по умолчанию), например,

@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.

66
ответ дан 31 October 2019 в 13:39
  • ОС: Победите 10
  • Начальная загрузка Spring: 2.1.2

я хотел служить статическому содержанию от 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

1
ответ дан 31 October 2019 в 13:39

Обратите внимание, что WebMvcConfigurerAdapter удерживается от использования теперь (см. WebMvcConfigurerAdapter). Из-за методов значения по умолчанию Java 8, только необходимо реализовать WebMvcConfigurer.

1
ответ дан 31 October 2019 в 13:39

Для текущей Загрузочной версии 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

1
ответ дан 31 October 2019 в 13:39

Для обслуживания от файловой системы

, я добавил spring.resources.static-location=file:../frontend/build в application.properties

index.html, присутствует в build папка

, Использование может также добавить полный путь

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

, я думаю так же, что можно попытаться добавить путь к папке Dropbox.

2
ответ дан 31 October 2019 в 13:39

FWIW, я не имел никакого успеха с эти spring.resources.static-locations рекомендуемый выше; то, что работало на меня, устанавливало spring.thymeleaf.prefix:

report.location=file:/Users/bill/report/html/
spring.thymeleaf.prefix=${report.location}
1
ответ дан 31 October 2019 в 13:39

@Mark Schäfer

Никогда слишком поздно, но добавляют наклонную черту (/) после помех:

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

Так http://<host>/index.html теперь достижимо.

5
ответ дан 31 October 2019 в 13:39

На основе @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);

  }

}
3
ответ дан 31 October 2019 в 13:39

Существует свойство spring.resources.staticLocations, которое может быть установлено в application.properties. Обратите внимание, что это переопределит местоположения по умолчанию. См. org.springframework.boot.autoconfigure.web.ResourceProperties.

7
ответ дан 31 October 2019 в 13:39

На основе @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/

, Это может быть очень удобно для разработки и тестирования.

19
ответ дан 31 October 2019 в 13:39

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 настраивает обработчики по умолчанию.

Также:

  • Примечание запаздывающая наклонная черта на внешнем пути к файлу. (Зависит от Вашего ожидания отображений URL).
  • Рассматривают рассмотрение исходного кода WebMvcAutoConfigurationAdapter.
32
ответ дан 31 October 2019 в 13:39

Другие вопросы по тегам:

Похожие вопросы: