更新新的Play 2.5提供了一个新的 CORS Filter

随着新的2.3 Java版本完成将Response类迁移到Promise类,以下代码不再有效.

public class CorsAction extends Action.Simple {

 public Result call(Context context) throws Throwable{ 
 Response response = context.response(); 
 response.setHeader("Access-Control-Allow-Origin","*"); 
 //Handle preflight requests 
 if(context.request().method().equals("OPTIONS")) { 
   response.setHeader("Access-Control-Allow-Methods","POST,GET,OPTIONS,PUT,DELETE"); 
   response.setHeader("Access-Control-Max-Age","3600"); 
   response.setHeader("Access-Control-Allow-Headers","Origin,X-Requested-With,Content-    Type,Accept,Authorization,X-Auth-Token"); 
   response.setHeader("Access-Control-Allow-Credentials","true"); 
   response.setHeader("Access-Control-Allow-Origin","*"); 
 return ok() 

 } 

 response.setHeader("Access-Control-Allow-Headers","X-Requested-With,Content-Type,X-    Auth-Token"); 
 return delegate.call(context); 
 } 
}

我正在开发Play(Java)2.3中的应用程序,我已经查看并尝试了不同的方法来启用CORS – 包括向路由文件添加/ OPTIONS方法 – 但没有成功.

我非常感谢新的Response实现如何处理这种类型的拦截,因为在新的Promise类中实现时,它似乎没有对头文件产生任何影响.

在此先感谢所有的帮助!!

解决方法

解决了这个问题:

来自服务器的所有API响应都应包含标题:“Access-Control-Allow-Origin”,“*”.我们需要为所有动作响应编写一个包装器.

在Global.java中

import java.net.URL;

import play.*;
import play.libs.F.Promise;
import play.mvc.Action;
import play.mvc.Http;
import play.mvc.Result;

public class Global extends GlobalSettings {

  // For CORS
  private class ActionWrapper extends Action.Simple {
    public ActionWrapper(Action<?> action) {
      this.delegate = action;
    }

    @Override
    public Promise<Result> call(Http.Context ctx) throws java.lang.Throwable {
      Promise<Result> result = this.delegate.call(ctx);
      Http.Response response = ctx.response();
      response.setHeader("Access-Control-Allow-Origin","*");
      return result;
    }
  }

  @Override
  public Action<?> onRequest(Http.Request request,java.lang.reflect.Method actionMethod) {
    return new ActionWrapper(super.onRequest(request,actionMethod));
  }

}

POST,PUT等服务器请求在主请求之前向服务器发出预检请求.这些预检请求的响应应包含以下标题:

“Access-Control-Allow-Origin”,“”
“允许”,“”
“访问控制允许 – 方法”,“POST,DELETE,OPTIONS”
“Access-Control-Allow-Headers”,“Origin,Referer,User-Agent”

在路线中添加:

OPTIONS /*all                           controllers.Application.preflight(all)

在Application Coltroller中:

package controllers;

import play.mvc.*;

public class Application extends Controller {

    public static Result preflight(String all) {
        response().setHeader("Access-Control-Allow-Origin","*");
        response().setHeader("Allow","*");
        response().setHeader("Access-Control-Allow-Methods",OPTIONS");
        response().setHeader("Access-Control-Allow-Headers",User-Agent");
        return ok();
    }

}

PS:通过这种方法,我不必为此创建一个scala过滤器.

java – Play Framework 2.3 – CORS标题的更多相关文章

  1. HTML5 3D书本翻页动画的实现示例

    这是一款十分炫酷的HTML5 3D书本翻页动画,效果相对比较简单,拖拽鼠标模拟用手翻页,需要的朋友们下面随着小编来一起学习学习吧

  2. 使用postMessage让 iframe自适应高度的方法示例

    这篇文章主要介绍了使用postMessage让 iframe自适应高度的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  3. ios – UIPopoverController出现在错误的位置

    所以我花了一些时间寻找答案,但到目前为止还没有找到任何答案.我正在尝试从UIInputAccessoryView上的按钮呈现弹出窗口.UIBarButtonItem我想显示popover来自定制视图,所以我可以使用图像.我创建这样的按钮:当需要显示popover时,我这样做:但我得到的是:弹出窗口看起来很好,但它应该出现在第一个按钮上时出现在第二个按钮上.然后我发现了这个问题:UIBarButto

  4. ios – 无法在UITableViewCell的drawRect中绘制

    我在使用自定义UITableViewCell的drawRect方法时遇到了麻烦.这是我正在使用的代码我已经调试过以确保所有数值都有意义,看起来它们确实存在.无法真正找出屏幕上没有任何内容的原因.值得一提的是,这也是一个在笔尖中定义的单元格.我正在使用iOS7sdk构建.有任何想法吗?tahnks解决方法你可能不应该在UITableViewCell自己的drawRect中这样做.而是创建一个自定义UIView并将其添加为子视图.另见thisanswer.

  5. UITableView在iOS 7中,在单元格中编辑UITextView时,不滚动到正确的位置

    我有一个静态单元的表视图.一个单元格包含一个UITextView,并且heightForRowAtIndexPath:是动态计算的,因此单元格总是足够高以容纳文本(该部分在iOS7下实现了一些工作,实际上,因为不可能简单地询问textView的contentSize).当我在文本视图中点击开始编辑时,键盘动画到位,tableView上的contentInsets会自动调整,以解决这个问题(即iPh

  6. ios – 找不到金属’质地’

    随着每个基于Metal的ImageView的实现,我都面临同样的问题Valueoftype‘MTLDrawable’hasnomember‘texture’好像苹果改变了一些金属api这是我试用的全部功能:解决方法执行系统和xcode更新后,我遇到了同样的问题.在更新过程中,xcode将构建目标切换到模拟器.一旦我将目标切换回设备,它就会再次编译.

  7. ios – 计算UITextField基线位置

    我试图通过编程方式将UITextField的实例的基线与UIButton的实例对齐.我正在处理这个计算类似于here描述的方式,但是使用UITextField可以有一个偏移的内容.任何想法如何获得UITextField中的文本位置甚至更好,是否有一个更简单的方法来对齐基线?解决方法在我的经验中,与UIButton不同,UITextField在文本周围实际上并没有任何偏移.无论如何,您可以在两个控件中找出确切的文本框:

  8. 尝试更改Bool属性时,ios – EXC_BAD_ACCESS错误

    我正在尝试更改Bool属性并且收到一个EXC_BAD_ACCESS错误.我正在使用XCode6和Swift.note属性保存不错,但已完成的属性会抛出EXC_BAD_ACCESS错误改变属性程序解决方法有同样的问题,解决方案确实是在@NSManaged属性中使用NSNumber.此外,您可以定义一个计算的Bool属性,以便您可以使用业务逻辑中的标量布尔值,而不能使用NSNumber.

  9. ios – UISearchController不重新显示旋转导航栏

    我已经实施了UISearchController,除了…解决方法看起来UISearchController忘记在状态栏重新出现时重新设置searchBar的框架.我认为这可能是UISearchController中的一个错误;似乎有一些列在radar.似乎searchBar的超级视图最终以错误的高度.这是令人烦恼的,因为解决方案因此涉及到SearchController的视图层次结构,哪个苹果可以改变…

  10. 键盘隐藏了IOS中的文本字段

    90个我在IOS中使用带有一些文本字段的scrollview创建了一个表单.视图看起来像这样,当我开始编辑州或以下字段时,键盘会隐藏该字段.像这样,我该怎么做才能看到下面的字段?

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部