2016-04-25 4 views
3

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

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

Когда я пытаюсь позвонить моей службы, Это дает me,

XMLHttpRequest не может загрузить http://localhost:9000/app/search/0/10. Ответ на запрос перед полетом не проходит проверку контроля доступа. Нет заголовка «Access-Control-Allow-Origin» на запрошенном ресурсе. Происхождение 'http://localhost', следовательно, не допускается. В ответе был код статуса HTTP 403.

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

+0

Возможно попробовать сделать allowedOrigins пустую строку, а не нуль? 'allowedOrigins ='. Или просто опустите этот параметр. Посмотрите, позволяет ли это. Или добавьте к нему localhost или 127.0.0.1. – ManoDestra

+0

Я сделал 'allowedOrigins = [" 127.0.0.1 "]'. Но до сих пор я не могу получить доступ. – codebot

ответ

2

От Play 2.3 Documentation, сначала добавьте свои фильтры в список 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() 
    }; 
} 
+0

Я уже добавил .. Но это происходит – codebot

0

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

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

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

2

Я, наконец, получил свой CORSFilter для работы. Это очень мало документации, и что там не работает. Надеюсь, это поможет кому-то. (Play 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 
} 
+0

2.5 Фильтры, по-видимому, сломаны для Java, но исправление на месте: https://github.com/playframework/playframework/pull/6238/files – BatteryAcid

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

  • Нет связанных вопросов^_^