Jersey
使用 Spring Security 保护 Jersey 端点
Spring Security 可以用来保护基于 Jersey 的 Web 应用,就像它可以用来保护基于 Spring MVC 的 Web 应用一样。但是,如果你想在 Jersey 中使用 Spring Security 的方法级安全,你必须配置 Jersey 使用 setStatus(int)
而不是 sendError(int)
。这可以防止 Jersey 在 Spring Security 有机会向客户端报告身份验证或授权失败之前提交响应。
jersey.config.server.response.setStatusOverSendError
属性必须在应用的 ResourceConfig
bean 上设置为 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
要与其他 Web 框架(如 Spring MVC)一起使用 Jersey,应将其配置为允许其他框架处理它无法处理的请求。首先,通过使用 filter
值配置 spring.jersey.type
应用属性来配置 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);
}
}