Tomcat 8 игнорирует фильтры CORS (web.xml, in-code, etc)

по какой-то странной причине Tomcat 8 (на сервере w2k12) игнорирует мои настройки фильтра CORS на tomcat8/conf/web.xml, которые являются следующими, согласно Apache Tomcat 8 docs:

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

Это действительно работает с GET-запросами, но когда я пытаюсь сделать сообщение, я получаю 403 запрещенных сообщения об ошибке:

Origin http://webapp.mycompany.com is not allowed by Access-Control-Allow-Origin.

Где http://webapp.mycompany.com это хостинг-провайдер моей компании со стандартными функциями, которые вы получаете с общим хостингом с cpanel, мой интерфейс там, и он отправляет запросы в другой домен, где у меня установлен сервер Tomcat 8 и webapp WAR, который является REST Api на основе Джерси.

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

Затем я попытался переместить фильтры в веб-приложение.xml вместо этого, не повезло, попытался добавить больше конфигураций, как разрешенные методы, попытался добавить заголовки в ответах прямо как это:

Response.status(Response.Status.OK)
        .entity(relaciona)
        .header("Access-Control-Allow-Origin", "*")
        .header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE, HEAD")
        .header("Access-Control-Allow-Headers", "X-PINGOTHER, Origin, X-Requested-With, Content-Type, Accept")
        .header("Access-Control-Max-Age", "1728000")
        .build();

Не получилось.

Любая помощь в этом была бы очень признательна, и просто, чтобы подтвердить, попробовал следующее:

  • Попробуйте установить конфигурацию как на сервере, так и в webapp web.xml файлы по отдельности, не повезло
  • Пытался добавить заголовки к каждому ответу в REST Api Джерси, не повезло
  • Запросы к API выполняются с интерфейсом HTML5 с bootstrap и jQuery, пытались добавить crossDomain:true к ajax-запросам, никакой разницы.
  • Добавлен исходный домен в xml как в web, так и в server web.xml-файлы (тестируются индивидуально) и не работают

Спасибо!

1 ответ

  1. после запроса сообщения с помощью crossdomain необходимо определить параметр @для запросов @POST / @PUT / @DELETE.

    Вы определили класс @Option для определения @Post?

    вот пример того, как это сделать:

    @OPTIONS
    @Compress
    @Path("/mypost")
    @Consumes({ MediaType.MULTIPART_FORM_DATA })
    @Produces({ MediaType.APPLICATION_JSON })
    public Response mypost_opts() {
        return Response.ok().build();
    }
    
    
    
    @POST
    @Compress
    @Path("/mypost")
    @Consumes({ MediaType.MULTIPART_FORM_DATA })
    @Produces({ MediaType.APPLICATION_JSON })
    public Response mypost() {
        return Response.ok().build();
    }