我尝试通过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
}
}
否则,将不会处理预检的请求。