我想检查如何在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. 区域子域名