【问题标题】:Jersey, restful web service, cross domain access denyJersey, restful web service, 跨域访问拒绝
【发布时间】:2016-03-14 07:50:51
【问题描述】:

我用netbeans创建restful web service,报错“cross domain access denied”

我已经添加了“跨源资源过滤器”

以下是我的代码。

@Provider
public class CrossOriginResourceSharingFilter implements ContainerResponseFilter {

@Override
public void filter(ContainerRequestContext requestContext, ContainerResponseContext response) {
    response.getHeaders().putSingle("Access-Control-Allow-Origin", "*");
    response.getHeaders().putSingle("Access-Control-Allow-Methods", "OPTIONS, GET, POST, PUT, DELETE");
    response.getHeaders().putSingle("Access-Control-Allow-Headers", "Content-Type");
}

}

和

@javax.ws.rs.ApplicationPath("webresources")
public class ApplicationConfig extends Application {

@Override
public Set<Class<?>> getClasses() {
    Set<Class<?>> resources = new java.util.HashSet<>();
    addRestResourceClasses(resources);
    return resources;
}

private void addRestResourceClasses(Set<Class<?>> resources) {
    resources.add(WebService.CategoryFacadeREST.class);
    resources.add(WebService.CrossOriginResourceSharingFilter.class);
    resources.add(WebService.ProductFacadeREST.class);
    resources.add(WebService.ReviewFacadeREST.class);
}   
}

【问题讨论】:

    标签: java web-services rest jersey


    【解决方案1】:

    我认为问题在于,Access-Control-Allow-Headers 中只允许使用 Content-Type 标头。请在请求中寻找标头Access-Control-Request-Headers...在Access-Control-Allow-Headers标头中设置内容或尝试以下代码:

    String reqHead = requestContext.getHeaderString("Access-Control-Request-Headers");
    if (null != reqHead && !reqHead.equals("")) {
        responseHeaders.putSingle("Access-Control-Allow-Headers", reqHead);
    }
    

    一般来说:出于安全原因,您不应在生产环境中使用通配符和这样的代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-26
      • 2016-03-02
      • 2015-08-22
      • 1970-01-01
      • 2014-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多