java

Jerseyで開発したRESTで任意リファラからのCORSアクセスを許可する

投稿日:


package jp.hoge.filter;

import java.util.Properties;

import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.core.Context;
import javax.ws.rs.ext.Provider;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * ランディングページからのメール登録RESTはCORSアクセス出来るようにする。
 */
@Provider
public class CorsFilter implements ContainerResponseFilter {

    private static final Logger logger = LoggerFactory.getLogger(CorsFilter.class);

    // HTTPリクエストヘッダからリファラを取得する用
    @Context
    private HttpServletRequest servletRequest;

    @Override
    public void filter(ContainerRequestContext request, ContainerResponseContext response) {

        // ランディングページからアクセスされるユーザ登録REST
        String targetRest = "accounts/create";

        // リクエストされたRESTパスがCORSアクセスを許すRESTの場合
        String requestedRestPath = request.getUriInfo().getPath();
        if(targetRest.equals(requestedRestPath)) {
            // ランディングページURL
            String permitReferer = "https://ランディングページ";

            // リファラがランディングページURLだった場合、CORS許可
            String referer = servletRequest.getHeader("referer");
            if(referer.startsWith(permitReferer)) {
                System.out.println("CORS許可");
                response.getHeaders().putSingle("Access-Control-Allow-Origin", "*");
                response.getHeaders().putSingle("Access-Control-Allow-Methods", "OPTIONS, GET, POST, PUT, DELETE");
                response.getHeaders().putSingle("Access-Control-Allow-Headers", "Content-Type");
            }
        }
    }
}

-java

執筆者:

関連記事

JavaとPerlでTCPソケット通信

目次1 はじめに2 対象読者3 実装3.1 TCPサーバ(Perl)3.2 TCPクライアント(Java)3.3 実行4 まとめ はじめに 前回の続きです。One IT ThingJavaとPerlで …

JavaでRSA暗号を使う際にCRYPTREC暗号リストに足元をすくわれる可能性を回避する

標準的な暗号しか使わないケースでもJavaでRSAを使う時はBouncyCastleを入れておいた方が無難、という話です。 “ECB”という文字列がプログラム中にあると監査に引 …

SpringBootアプリにBootstrap4を追加(WebJars使用)

SpringBootにCSSやJSを追加する場合は概ね以下のパターンがあるんじゃないかと思います。(bowerはもう使わない方向で) CDNで外部から読み込む<script src=&#8221 …

Javascript(暗号化JSライブラリ「Forge」)とp12ファイルで署名値を作成、Javaで検証する

前回、送信データの改ざんを検知する為、簡易的なセキュリティトークンであるPKCS#12形式のファイルを作成しました。 One IT Thing  10 Pockets開発用のPKCS#12フ …

JavaコアAPI数の遷移をChart.jsでグラフ化してみる

chart.jsの試用を兼ねてJavaバージョンが上がるごとに標準搭載されているAPI数がどう変化しているか調べました。 目次1 調査結果2 グラフ化3 不要なAPIは外部化の傾向 調査結果 Orac …

 

shingo.nakanishi
 

東京在勤、1977年生まれ、IT職歴2n年、生涯技術者として楽しく生きることを目指しています。デスマに負けず健康第一。