Spring – Resteasy – Cors Double Access-Control-Allow-Origin标题作为回应

我用 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() {
    }

}
点赞