Как включить фильтр CORS tomcat 8.5 для доступа к статическим файлам? - PullRequest
1 голос
/ 31 мая 2019

Я прочитал много похожих вопросов, но ни одно из указанных решений не помогло мне, поэтому я публикую еще один: / Мне нужно получить из моего углового клиента некоторые файлы 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 для доступа к этим файлам из моего приложения? Где я делаю не так?

Ответы [ 2 ]

0 голосов
/ 18 июня 2019

Добавить следующим образом,

<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
<init-param>
<param-name>cors.allowed.origins</param-name>
<param-value>*</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
0 голосов
/ 04 июня 2019

Я не проверял его, но я полагаю, что вы можете поэкспериментировать со свойством httpHeaders:

[src]="{ url: 'http://...', httpHeaders: { 'h1': 'v1', 'h2': 'v2', 'hn': 'vn' }}"

См. https://github.com/VadimDez/ng2-pdf-viewer#src. Это относится к свойствам pdf.js в Mozilla,которые включают httpHeaders.Это документально подтверждено :

 * @property {Object}     httpHeaders - Basic authentication headers.

, что не очень информативно.Тем не менее, ng2-pdf-viewer упоминает httpHeaders в сочетании с CORS .

Также есть withCredentials, но речь идет об отправке файлов cookie в запросах CORS, и я не думаю, чтовот в чем твоя проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...