[Jersey] CORS対応
Jersey2でREST APIを提供し、フロントエンドはNode.js (Koa) という構成のシステムを開発している。
APIはTomcat, フロントエンドはNode.jsなのでブラウザからは別ドメインと判定されてしまうので、クロスドメイン対応 (以降CORS対応) が必要。
今までは Apache を噛ませてヘッダーに Access-Control-Allow-ほにゃらら
を無理やりくっつけていたんだけど、Apacheなしでも動作確認できるようにJerseyのFilterを作成した。
定型パターンだと思うので、コードを残しておく。
package jp.tmt_mc.smu_plus.api.filter;
import java.io.IOException;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.core.MultivaluedMap;
/**
* CORS対応フィルター
*
* @author kimurakazunori
*
*/
public class CorsFilter implements ContainerResponseFilter {
@Override
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)
throws IOException {
MultivaluedMap<String, Object> headers = responseContext.getHeaders();
// すべてのクライアントからの要求を許可する
headers.add("Access-Control-Allow-Origin", "*");
headers.add("Access-Control-Allow-Methods", "HEAD,GET,POST,PUT,DELETE");
headers.add("Access-Control-Allow-Headers", "X-XXX-Authorization,Content-Type");
}
}
今回は X-XXX-Authorization
に認証トークンを格納する想定だけど、システムによってはいろんな独自ヘッダーを用いる事があると思う。その部分は変更が必要。
コメント
コメントを投稿