我想檢查如何在Playframework 2.1(Java)中啓用交叉域名域名共享。我沒有看到有關如何執行此操作的任何文檔。允許交叉域名域名共享
3
A
回答
2
不知道這如何轉換爲2.x,但在1.2.5中,我所做的是這樣的。如果您有非標準標題,Access-Control-Allow-Headers是可選的。您可以將Allow-Origin的*更改爲僅匹配您想要允許的域。
@Before
static void CORS() {
if(request.headers.containsKey("origin")){
response.headers.put("Access-Control-Allow-Origin", new Header("Access-Control-Allow-Origin", "*"));
response.headers.put("Access-Control-Allow-Headers", new Header("Access-Control-Allow-Headers", "my-custom-header, my-second-custom-header"));
}
}
如果有非標方法(GET/POST),或使用自定義頁眉,大多數用戶代理將有預檢OPTIONS調用,所以你什麼,我要做的就是將它添加到我的路線文件:
#This catches the preflight CORS calls
OPTIONS /{path} Application.options
,這在我的控制器:
/**
* Cross Origin Request Sharing calls are going to have a pre-flight option call because we use the "non simple headers"
* This method catches those, (headers handling is done in the CORS() method)
*/
public static void options() {}
2
使用Scala語言,一個很好的和簡單的PlayFramework的解決辦法是使用以下ActionBuilder
import play.api.mvc._
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global
// An Actionbuilder for CORS - Cross Origin Resource Sharing
object CorsAction extends ActionBuilder[Request] {
def invokeBlock[A](request: Request[A], block: (Request[A]) ⇒ Future[SimpleResult]): Future[SimpleResult] = {
block(request).map { result =>
request.headers.get("Origin") match {
case Some(o) => result.withHeaders("Access-Control-Allow-Origin" -> o)
case None => result
}
}
}
}
ActionBuilder重寫invokeBlock方法,目的是將您的應用程序控制器操作創建的結果(由Play> = 2.1中的Future對象包裝)映射到具有額外的「Access-Control-Allow -Origin「標題字段,如果請求帶有」Origin「標題字段。
上述動作構建器可以被簡單地使用如下:
object MyController extends Controller {
def myAction = CorsAction {
Ok("whatever HTML or JSON you want")
// it will be certainly processed by your browser
}
}
相關問題
- 1. 允許在Uri的域名/子域名
- 2. 允許所有子域名
- 3. htaccess允許國家域名
- 4. scrapy允許所有域名
- 5. 允許在節點上跨域共享
- 6. 流星:lukemadera:社交共享包不允許從本地域共享
- 7. 允許哪些域名?是否有可能獲得「.df」域名?
- 8. 停止IP地址和子域名,只允許域名
- 9. 使用FormsAuthentication交叉域名Cookie
- 10. 是否Umbraco允許non-umbraco子域名
- 11. HttpWebRequest檢查允許的域名
- 12. 如何允許域名在.htaccess
- 13. Laravel 5共享主機子域名htaccess
- 14. Maximo交叉域
- 15. 域名重定向域名/域名
- 16. 交叉原點域
- 17. 錯誤交叉域
- 18. 交叉(子)域名Ajax表單提交captcha
- 19. Codeigniter子域名共享一個共同的應用程序
- 20. 共享主機,域名和DNS如何共同工作?
- 21. 在域名和子域名之間分享會話
- 22. 共享域邏輯?
- 23. 共享域邏輯
- 24. 表單提交 - HTML - 域名
- 25. 允許主域名和不允許通過.htaccess訪問子文件夾
- 26. 如何在域和子域之間共享cookie,但不共享其他子域
- 27. X-FRAME-OPTIONS允許,從頂級域名,以及所有後續子域
- 28. 啓用交叉域名腳本在內部網
- 29. 跨域cookie - 域間共享數據
- 30. 區域子域名