2016-06-16 21 views
3

AJAX呼び出しでFinatraを使用して構築したREST APIにアクセスしようとしています。残念ながら、私は次のエラーを取得:Finatraアクセス制御の許可元

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を許可するように適切にヘッダーを設定できますか?ないプリフライトリクエストが処理されません場合

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

:、このような何かを:

+0

あなたは['' 'CorsFilter''''](https://github.com/twitter/finagle/blob/develop/finagle-http/src/main/scala/com/twitter/finagle/http/)を試しましたか?フィルター/ Cors.scala#L236)? –

答えて

1

一般的なアプリケーションフィルタ、コントローラフィルタまたはアクションフィルタを追加することは可能です。 finatraのthisフィルタセクションを見てください。

Corsの問題を解決するためのコントローラー単位のフィルタアプローチが可能です。先ほど作成したフィルタは、あなたのサーバーを定義するセクションで、その後、

import com.twitter.finagle.{Filter, Service, SimpleFilter} 

class CorsFilter extends SimpleFilter[Request, Response] { 
    override def apply(request: Request, service: Service[Request, Response]): Future[Response] = { 

     service(request).map { 
      response => response.headerMap 
       .add("access-control-allow-origin", "*") 
       .add("access-control-allow-headers", "accept, content-type") 
       .add("access-control-allow-methods", "GET,HEAD,POST,DELETE,OPTIONS,PUT,PATCH") 

      response 
     } 
} 

コントローラを登録し、それに接続::

object ServerMain extends Server 

class Server extends HttpServer { 

    override val name = "com.example.server" 

    override def configureHttp(router: HttpRouter) { 
    router   
     .filter[CommonFilters] 
     .filter[LoggingMDCFilter[Request, Response]] 
     .filter[TraceIdMDCFilter[Request, Response]]   
     .add[CorsFilter, MainController] // see the CorsFilter here  
    } 
} 

IをServer.scalaでは、それが定義されていますフィルタを提出それが役に立てば幸い。

関連する問題