Spring mvc: доступ ресурсов к внешней папке

Я сохранил медиафайлы (изображения и фильмы) в папке (например, C:\test\tes.png), и я пытаюсь получить доступ к изображениям с URL-адресом, например: http://localhost:8080/app/picture/test.png. Для этого я использовал тег ресурсов (пружина 3), как показано ниже:

<mvc:resources mapping="/picture/**" location="file:/test" />

Когда я пытаюсь получить доступ, у меня есть ошибка без дополнительных сведений.

Запрошенный ресурс не найден

у меня в логах:

2011-11-07 20:48:55,241 [http-8080-2] DEBUG org.springframework.web.servlet.DispatcherServlet — DispatcherServlet с именем «Family», обрабатывающий запрос GET для [/Family/photos/testImage2.png] 2011- 11-07 20:48:55,241 [http-8080-2] DEBUG org.springframework.web.servlet.handler.SimpleUrlHandlerMapping — шаблоны сопоставления для запроса [/photos/testImage2.png] [/**] 2011-11- 07 20:48:55,241 [http-8080-2] DEBUG org.springframework.web.servlet.handler.SimpleUrlHandlerMapping — переменные шаблона URI для запроса [/photos/testImage2.png] {} 2011-11-07 20:48 :55,242 [http-8080-2] DEBUG org.springframework.web.servlet.handler.SimpleUrlHandlerMapping — сопоставление [/photos/testImage2.png] с HandlerExecutionChain с обработчиком [org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler@3a779f5e] и 4 перехватчика 2011-11-07 20:48:55,242 [http-8080-2] DEBUG org.springframework.web.servlet.DispatcherServlet — значение Last-Modified для [/Family/photos/testImage2.png]: -1 20 11-11-07 20:48:55,242 [http-8080-2] DEBUG org.springframework.web.servlet.DispatcherServlet — Null ModelAndView возвращен DispatcherServlet с именем «Семейство»: предполагается, что HandlerAdapter завершил обработку запроса 2011-11-07 20 :48:55,242 [http-8080-2] DEBUG org.springframework.web.servlet.DispatcherServlet — успешно выполненный запрос

Я конечно не все понимаю...

Другой вопрос: я не уверен, что это хороший подход. Какие есть другие решения для доступа к мультимедиа во внешней папке?

Заранее спасибо !


person user1034407    schedule 07.11.2011    source источник
comment
У вас есть ярлык для папки мультимедиа в вашем веб-приложении?   -  person nicholas.hauschild    schedule 08.11.2011
comment
Ознакомьтесь с сервлетом Spring Resources. Это может обеспечить функциональность, которую вы хотите.   -  person DwB    schedule 08.11.2011


Ответы (1)


Первый вопрос: "отображение"

Я не уверен на 100%, но я предполагаю, что для местоположения не хватает последнего /. изменить его на:

<mvc:resources mapping="/picture/**" location="file:/test/" />

Другой вопрос: я не уверен, что это хороший подход. Какие есть другие решения для доступа к мультимедиа во внешней папке?

По моему скромному мнению, предоставлять пользователю веб-сайта полный доступ для чтения к папке — очень плохая практика. Внимание, доступ не ограничивается только папкой, пользователь также может получить доступ ко всем подпапкам.

*И даже если вы решили проигнорировать это предупреждение, вы должны проверить, что произойдет, если кто-то воспользуется вызовом http://localhost:8080/app/picture/../someFile.** Я не знаю, что произойдет, но **убедитесь на 120%, что никто не сможет получить доступ к какому-либо файлу вне папки picture! -- Я изучил реализацию Spring, и кажется, что Spring уже решает эту проблему.*Начиная с Spring 3.2.12, 4.0.8, 4.1.2 обработчик ресурсов не получать доступ к папке за пределами указанной папки ресурсов. (SPR-12354: Обход каталога со статической обработкой ресурсов (CVE-2014-3625))

person Ralph    schedule 07.11.2011
comment
Спасибо, Ральф, за предложения! Вы, безусловно, правы на эту практику, поэтому я использовал MediaServlet для их извлечения. См. ссылку для примера изображения. Отличные работы! - person user1034407; 08.11.2011
comment
Спасибо за ссылку! Спас мою ночь! хаухауа - person Vitor Braga; 20.02.2013