One IT Thing

IT業界で飯を食う為の学習系雑記

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

執筆者:

関連記事

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

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

Spring&JSPの検証環境を速攻で作る

2019年現在、オワコン風潮の強いJSPですが使っているプロジェクトもまだまだあり、枯れた技術を好む官公庁系のプロジェクトでは根強いシェアを誇っています。実装検証をする為に環境を作る機会があったりする …

ブラウザでRSA暗号化したデータをサーバで復号する(Angular + JSEncrypt、Spring MVC)【前編】

セキュリティ的にクリティカルなデータをクライアントブラウザで暗号化保存するようにしてみます。 通信経路はHTTPSで暗号化されていてもスマホに重要なデータが平文で残っていたら珠に傷です。 目次1 環境 …

IVS対応フォント「IPAmj明朝」で使えるフォントをWeb上に一覧表示してみる(3)

前回の続きです。 One IT ThingIVS対応フォント「IPAmj明朝」で使えるフォントをWeb上に一覧表示してみる(2)https://one-it-thing.com/2111前回 …

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

Javaはデフォルトで多数のAPIクラスを持っていてコーディングを楽にしてくれます。その数は増え続けているんでしょうか。 バージョンが上がるごとにどう変化しているか調べてchart.jsでグラフ化しま …

 

shingo.nakanishi
 

東京在勤、職歴20年越え中年ITエンジニアです。まだ開発現場で頑張っています。

19歳(1996年)から書き始めた個人日記が5,000日を超え、残りの人生は発信をして行きたいと思い、令和元日からこのサイトを開始しました。勉強と試行錯誤をしながら、自分が経験したIT関連情報を投稿しています。

私と同じく、今後IT業界で生計を立てて行きたいと考えている方や、技術共有したいけどフリーランスで孤独、といった方と一緒に成長、知識共有して行けたら楽しいな、と思っています。