Jersey
使用 Spring Security 保護 Jersey 端點
Spring Security 可用於保護基於 Jersey 的 Web 應用程式,其方式與保護基於 Spring MVC 的 Web 應用程式的方式非常相似。但是,如果您想將 Spring Security 的方法級安全性與 Jersey 結合使用,則必須將 Jersey 配置為使用 setStatus(int)
而不是 sendError(int)
。這可以防止 Jersey 在 Spring Security 有機會向客戶端報告身份驗證或授權失敗之前提交回應。
必須在應用程式的 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));
}
}
將 Jersey 與另一個 Web 框架一起使用
若要將 Jersey 與另一個 Web 框架(例如 Spring MVC)一起使用,應將其配置為允許另一個框架處理它無法處理的請求。首先,將 spring.jersey.type
應用程式屬性配置為值 filter
,以將 Jersey 配置為使用篩選器而不是 Servlet。其次,將您的 ResourceConfig
配置為轉發可能導致 404 的請求,如下列範例所示。
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);
}
}