2016-04-25 29 views
3

我試圖在我的java播放應用程序上啓用CORS過濾器。我正在使用angularjs訪問本地主機來獲取一些數據。下面是我在我的遊戲應用程序方面所做的,在Java中啓用CORS過濾器播放應用程序

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.

我該如何解決這個問題?

+0

也許嘗試做allowedOrigins一個空字符串,而不是空? 'allowedOrigins ='。甚至只是省略該參數。看看它是否允許。或者將localhost或127.0.0.1添加到它。 – ManoDestra

+0

我做過'allowedOrigins = [「127.0.0.1」]'。但我仍然無法訪問。 – codebot

回答

2

Play 2.3 Documentation, 首先將您的過濾器添加到build.sbtlibraryDependencies列表中,如下所述。

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的工作。關於這方面的文檔很少,什麼都不起作用。希望這可以幫助別人。 (播放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

相關問題