LoginSignup
0
0

More than 5 years have passed since last update.

Apache Jena Fuseki 2.3.0 の CORS 設定

Posted at

問題

Apache Jena Fuseki 2 で Readonly SPARQL Endpoint の方法でエンドポイントを立てると Cross Origin Resource Sharing ができない。
HTTP レスポンスヘッダに Access-Control-Allow-Origin: * がついていないのでどうしょうもない。Fuseki 1 ではついていたのに。

原因

ここに書いてある通り。version 1 → 2 の際に設定方法が変わった、とかではなく、そもそも実装されていない。2.3.1 でフィックスされたとのこと。

対策

2.3.1 がリリースされたらそちらを使うのが最良ではあるもの、現行2.3.0 では以下の手順で。

WAR版 ではなくて組み込み版を使っている場合には jetty のorg.eclipse.jetty.servlets.CrossOriginFilter がビルトインで使えるので、FUSEKI_BASE/webapp/WEB-INF/web.xml に以下のフィルタ設定を追加することで CORS ヘッダをつけてくれるようになる。

web.xml
<!-- CORS filter-->
    <filter>
        <filter-name>cross-origin</filter-name>
        <filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class>
        <init-param>
            <param-name>allowedOrigins</param-name>
            <param-value>*</param-value>
        </init-param>
        <init-param>
            <param-name>allowedMethods</param-name>
            <param-value>GET,POST,DELETE,PUT,HEAD,OPTIONS</param-value>
        </init-param>
        <init-param>
            <param-name>allowedHeaders</param-name>
            <param-value>Accept, Origin, X-Requested-With, Content-Type, Last-Modified, Authorization</param-value>
        </init-param>
        <init-param>
            <param-name>exposedHeaders</param-name>
            <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>cross-origin</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

WAR 版で jetty 以外の Servlet Container を使っている場合にはこの方法は使えないのでご注意を。2.3.1 のリリースを待つか、自力で Filter を持ってくるなどしましょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0