Я попытался включить фильтр CORS в своем приложении java play. Я получаю доступ к localhost с помощью angularjs для получения некоторых данных. Вот что я сделал на стороне игрового приложения,

application.conf

play.http.filters = "com.de.filters.Filters"
play.filters.cors {
    allowedOrigins = null
    allowedHttpMethods = ["GET", "POST"]
    allowedHttpHeaders = ["Accept"]
    preflightMaxAge = 3 days
}

Filters.java

public class Filters implements HttpFilters {
    @Inject
    CORSFilter corsFilter;

    public EssentialFilter[] filters() {
        return new EssentialFilter[]{corsFilter};
    }
}

Когда я пытаюсь позвонить в свою службу, появляется ошибка,

XMLHttpRequest не может загрузить http: // localhost: 9000 / app / search / 0/10. Ответ на предполетный запрос не проходит проверку контроля доступа: в запрошенном ресурсе отсутствует заголовок Access-Control-Allow-Origin. Следовательно, к источнику "http: // localhost" не разрешен доступ. Ответ имел код состояния HTTP 403.

Как я могу это исправить?

3
codebot 26 Апр 2016 в 00:07

3 ответа

Лучший ответ

Вместо этого добавьте эти строки в application.conf.

play.filters.cors {
  # allow all paths
  pathPrefixes = ["/"]
  # allow all origins
  allowedOrigins = null
  allowedHttpMethods = ["GET", "POST", "PUT", "DELETE"]
  # allow all headers
  allowedHttpHeaders = null
}

Вы можете обратиться к этому моему ответу для получения дополнительной информации.

0
Community 23 Май 2017 в 12:13

Наконец-то я заставил свой CORSFilter работать. По этому поводу очень мало документации, а то, что есть, не работает. Надеюсь, это кому-то поможет. (Играть в 2.5.4)

import com.google.inject.Inject;
import play.http.HttpFilters;
import play.mvc.EssentialAction;
import play.mvc.EssentialFilter;
import play.filters.cors.CORSFilter;

public class MyFilters extends EssentialFilter implements HttpFilters {

    @Inject
    private CORSFilter corsFilter;


    @Override
    public EssentialAction apply(EssentialAction next) {
        return corsFilter.asJava().apply(next);
    }

    @Override
    public EssentialFilter[] filters() {
        EssentialFilter[] result = new EssentialFilter[1];
        result[0] = this;

        return result;
    }
}

Также добавил это в application.conf

play.filters.cors{
# allow all paths
  pathPrefixes = ["/"]
  # allow all origins
  allowedOrigins = null
  allowedHttpMethods = ["GET", "POST", "PUT", "DELETE"]
  # allow all headers
  allowedHttpHeaders = null
}
2
NewfrontSolutions 12 Июл 2016 в 12:32

Из документации по Play 2.3, сначала добавьте фильтры в список libraryDependencies в build.sbt, как указано ниже.

libraryDependencies += filters

Затем в application.conf не устанавливайте play.filters.cors.allowedOrigins как [null], по умолчанию "все источники разрешены". Установите действительный список доменов или просто проигнорируйте его. Не забудьте указать свои фильтры:

play.http.filters = "filters.Filters"

Наконец, в вашем методе Filters.filter() напишите, как показано ниже, указав метод asJava(), как указано в документации.

public EssentialFilter[] filters() {
    return new EssentialFilter[] { 
        corsFilter.asJava()
    };
}
2
Luís Brito 25 Апр 2016 в 21:32