我尝试通过AJAX调用访问使用Finatra构建的REST API。不幸的是,我收到以下错误:

Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

我已经阅读了有关启用CORS的信息,但是在Finatra 2.1.6中找不到如何执行此操作的信息。我已经看到有一个可以启用并且非常宽松的策略,但是我不知如何无法使其运行。在我的代码中,我写道:
override def configureHttp(router: HttpRouter) {
  router
    .filter(new HttpFilter(Cors.UnsafePermissivePolicy))
    .add(controller)
}

如何正确设置标题以允许在Finatra中使用CORS?

最佳答案

除了CorsFilter之外,您还需要添加一个 Controller 来管理所有预检的OPTIONS请求(请参考:https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requests),如下所示:

class CorsController extends Controller {
   options("/api/:*") {
     _: Request => response.ok
   }
}

否则,将不会处理预检的请求。

09-19 09:50