Я попытался включить фильтр 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 ответа
Вместо этого добавьте эти строки в application.conf.
play.filters.cors {
# allow all paths
pathPrefixes = ["/"]
# allow all origins
allowedOrigins = null
allowedHttpMethods = ["GET", "POST", "PUT", "DELETE"]
# allow all headers
allowedHttpHeaders = null
}
Вы можете обратиться к этому моему ответу для получения дополнительной информации.
Наконец-то я заставил свой 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
}
Из документации по 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()
};
}
Похожие вопросы
Связанные вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.