2015-01-16 2 views
0

Я использую apache tomcat V7.0. С клиентской стороны я делаю вызов ajax для доступа к службе REST, размещенной на сервере apache tomcat и построенной с использованием JAX-RS. У меня есть только один метод GET для отдыха. Клиент не находится в том же домене, что и на сервере. Предположим, что я сохранил html на своем рабочем столе, и я запускаю html-файл. Это означает, что у меня есть этот html-файл без домена. Ответ, который я получаю, - это сервер: [HTTP/1.1 403 Запрещено 16 мс]. Это ошибка CORS. Чтобы избавиться от этой ошибки я сделал следующие вещи: стороны клиента код:Невозможно обрабатывать запросы CORS в apache tomcat

xmlhttp = new XMLHttpRequest(); 
    xmlhttp.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); 
    xmlhttp.setRequestHeader("Access-Control-Allow-Origin", "*"); 
    xmlhttp.setRequestHeader("Access-Control-Allow-Methods","GET, POST"); 
    //Normal ajax calls of setting url and opening requests follows 

Сервера конфигурации стороны web.xml:

<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> 
<init-param> 
    <param-name>cors.allowed.methods</param-name> 
    <param-value>GET,POST,HEAD,OPTIONS,PUT</param-value> 
</init-param> 
<init-param> 
    <param-name>cors.allowed.headers</param-name> 
    <param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value> 
</init-param> 
<init-param> 
    <param-name>cors.exposed.headers</param-name> 
    <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value> 
</init-param> 
<init-param> 
    <param-name>cors.support.credentials</param-name> 
    <param-value>true</param-value> 
</init-param> 
<init-param> 
    <param-name>cors.preflight.maxage</param-name> 
    <param-value>10</param-value> 
</init-param> 
</filter> 
<filter-mapping> 
    <filter-name>CorsFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

Даже после добавления всех CORS обработки, как на сервере и клиентская сторона. Я получаю ошибку cors. Я предполагаю, что запрос даже не доходит до фильтров и отклоняется. Есть ли какая-то конфигурация, которая требуется на сервере, чтобы пропустить запрос. В apache я искал в Интернете и обнаружил, что мы можем сделать это в файле .htaccess, но что делать в случае apache tomcat?

+0

403 не является особой ошибкой cors. Пожалуйста, добавьте трассировку стека к вашему вопросу для получения лучшего ответа. –

+0

Точная ошибка, которую я получил в mozilla: Запрос на перекрестный запрос заблокирован: политика одного и того же происхождения запрещает чтение удаленного ресурса по адресу http: // localhost: 8080/restMailer/rest/mailService? Query = {% 22subject% 22:% 22Test% 201% 22% 22vendorCode% 22:% 22V00002% 22% 22name% 22:% 22Test% 202% 22% 22enquiry% 22:% 22Test% 203% 22% 22contactNumber% 22:% 22Test% 204% 22,% 22email% 22:% 22Test% 205% 22,% 22icode% 22:% 22as723asd343ascfgru323sA% 22}. Это можно устранить, переместив ресурс в тот же домен или включив CORS. – john0609

+0

Похоже, что решения этой проблемы нет. Я просто хотел изменить свойства заголовка всякий раз, когда запрос поступает на порт 8080 из tomcat. – john0609

ответ

0

Вы пытались установить cors.allowed.origins с информацией о клиенте? например:

<init-param> 
    <param-name>cors.allowed.origins</param-name> 
    <param-value>http://10.3.50.139:8481</param-value> 
    </init-param> 
+0

Нет, я не пробовал. Для какого сервлета должны быть указаны эти параметры init? – john0609

Смежные вопросы