Jersey

Spring Security を使用した Jersey エンドポイントの保護

Spring Security は、Spring MVC ベースの Web アプリケーションを保護するために使用できるのとほぼ同じ方法で、Jersey ベースの Web アプリケーションを保護するために使用できます。ただし、Jersey で Spring Security のメソッドレベルセキュリティを使用する場合は、sendError(int) ではなく setStatus(int) を使用するように Jersey を構成する必要があります。これにより、Spring Security がクライアントに認証または認可の失敗を報告する機会を得る前に、Jersey がレスポンスをコミットすることを防ぎます。

次の例に示すように、アプリケーションの ResourceConfig Bean で jersey.config.server.response.setStatusOverSendError プロパティを true に設定する必要があります。

import java.util.Collections;

import org.glassfish.jersey.server.ResourceConfig;

import org.springframework.stereotype.Component;

@Component
public class JerseySetStatusOverSendErrorConfig extends ResourceConfig {

	public JerseySetStatusOverSendErrorConfig() {
		register(Endpoint.class);
		setProperties(Collections.singletonMap("jersey.config.server.response.setStatusOverSendError", true));
	}

}

別の Web フレームワークと一緒に Jersey を使用する

Spring MVC などの別の Web フレームワークと一緒に Jersey を使用するには、他のフレームワークが処理できないリクエストを処理できるように構成する必要があります。まず、filter の値を使用して spring.jersey.type アプリケーションプロパティを構成することにより、サーブレットではなくフィルターを使用するように Jersey を構成します。次に、次の例に示すように、404 になるリクエストを転送するように ResourceConfig を構成します。

import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.servlet.ServletProperties;

import org.springframework.stereotype.Component;

@Component
public class JerseyConfig extends ResourceConfig {

	public JerseyConfig() {
		register(Endpoint.class);
		property(ServletProperties.FILTER_FORWARD_ON_404, true);
	}

}