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 を使用する
Jersey を Spring MVC などの別の Web フレームワークと一緒に使用するには、他のフレームワークが処理できないリクエストを処理できるように構成する必要があります。まず、spring.jersey.type
アプリケーションプロパティを filter
の値に設定して、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);
}
}