我在Eclipse中有一个Maven项目,我在后端使用JAX-RS。 抛出代码,一切正常(我使用Postman测试响应并发送请求)。当我尝试从javascript(使用jQuery)调用GET / POST请求时出现问题。我在chrome控制台中收到此CORS错误:
仅支持协议方案的交叉原始请求:http,数据,chrome,chrome-extension,https。
我在 this page的帮助下启用了CORS,即使这样做了,我仍然遇到了这个问题。
根据说明,我添加了这个课程:
package org.decept.hunter.thefbcrawler;
import java.io.IOException;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.ext.Provider;
@Provider
public class CORSHandler implements ContainerResponseFilter {
@Override
public void filter(ContainerRequestContext creq, ContainerResponseContext cres) throws IOException {
// TODO Auto-generated method stub
cres.getHeaders().add("Access-Control-Allow-Origin", "*");
cres.getHeaders().add("Access-Control-Allow-Headers", "origin, content-type, accept, authorization");
cres.getHeaders().add("Access-Control-Allow-Credentials", "true");
cres.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");
//cres.getHeaders().add("Access-Control-Max-Age", "1209600");
//return cres;
}
}
我还改变了web.xml:
<servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>
org.glassfish.jersey.servlet.ServletContainer
</servlet-class>
<init-param>
<param-name>
com.sun.jersey.spi.container.ContainerResponseFilters
</param-name>
<param-value>
mypackagename.CORSHandler
</param-value>
</init-param>
<init-param>
<param-name>
jersey.config.server.provider.packages
</param-name>
<param-value>mypackagename</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/webapi/*</url-pattern>
</servlet-mapping>`
我在Eclipse自身的Apache Tomcat(7)Web服务器上运行该项目。