我用 Spring 3和Resteasy设置了一个Web应用程序;由于我的资源需要身份验证,因此我不允许使用*作为Access-Control-Allow-Origin.
所以我配置了
org.jboss.resteasy.plugins.interceptors.CorsFilter
使用正确的原始域名.
这适用于桌面客户端(Paw for Mac Os等),但不适用于浏览器(Chrome);问题是响应包含Access-Control-Allow-Origin的双精度值,即我配置的值和’*’.
CorsFilter不应该受到责备,因为即使你配置了多个原点,它总是只为标题添加一个值,即请求所要求的值.
我根本不知道谁会把那个额外的(和错误的)标题,任何想法放在我能找到的地方?
请注意,双标头出现在GET请求上,但不出现在OPTIONS请求上.
最佳答案 我不确定你的双头标头来自哪里,但你是否尝试使用自定义过滤器?
例如:
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class SimpleCorsFilter implements Filter {
public SimpleCorsFilter() {
}
@Override
public void doFilter(ServletRequest req,
ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
HttpServletRequest request = (HttpServletRequest) req;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "X-Requested-With, Authorization, Content-Type");
if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
response.setStatus(HttpServletResponse.SC_OK);
} else {
chain.doFilter(req, res);
}
}
@Override
public void init(FilterConfig filterConfig) {
}
@Override
public void destroy() {
}
}