Я прочитал много похожих вопросов, но ни одно из указанных решений не помогло мне, поэтому я публикую еще один: / Мне нужно получить из моего углового клиента некоторые файлы PDF на моем сервере Tomcat 8.5.37, но я регулярно блокируется политикой Cors.
Как правильно добавить заголовки Cosr?
Я работаю с Tomcat 8.5.37 (на самом деле localhost),
Прежде всего, я создал папку для этих файлов в / webapps / my-files и поместил в нее простой файл «file.pdf», а затем добавил в свой файл server.xml в теге следующее:
<Context docBase="/my-files" path="/web-docs"></Context>
затем я помещаю это в мой файл web.xml:
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Мое клиентское приложение является приложением Angular 7, и я использую модуль "ng2-pdf-viewer" для отображения файлов PDF. Согласно документации модуля, он выполняет HTTP-вызов по указанному URL-адресу, чтобы получить файл и показать его. Соответственно, я вижу вызов get в моей консоли Chrome, сессия «Сеть». В сеансе "Заголовки ответа" я вижу некоторые заголовки, такие как "Content-Type" и "Content-Lenght" с правильными значениями, но все остальные стандартные заголовки Cors (Access-Control-Allow-Origin, Access-Control-Allow-Methods ecc ...) отсутствуют.
Если я использую расширения Chrome для имитации заголовков Cors, я правильно получаю файл PDF, и компонент работает, как и ожидалось, но без этого расширения я получаю блокировку Cors.
Я поместил этот фильтр Cors в мой файл web.xml, на первую позицию в сеансе «Определение встроенного фильтра», но он не работал.
Я добавил много <init-param>
, согласно официальной документации Tomcat, но это не сработало.
Я попытался использовать пользовательский фильтр Cors с реализацией HttpServletRequest
и HttpServletResponse
и реализацией ContainerRequestContext
и ContainerResponseContext
, но оба не работали.
Когда я пишу "http://localhost:8080/web-docs/file.pdf",, мой браузер показывает это. Когда я пытаюсь получить файл от моего клиента, я блокируюсь CORS.
Как мне установить хороший фильтр Cors для доступа к этим файлам из моего приложения? Где я делаю не так?