gpt4 book ai didi

java - RESTful 网络服务 : how to set headers in java to accept XMLHttpRequest allowed by Access-Control-Allow-Origin

转载 作者:IT老高 更新时间:2023-10-28 20:39:38 26 4
gpt4 key购买 nike

我有一个 RESTful 网络服务,它将返回字符串,它是用 Java (JAX-WS) 编写的。我的问题是当我使用以下 URL 向该 Web 服务发送请求时:

http://localhost:8080/project/webservices/getlist/getListCustomers

在控制台中,它给了我以下错误消息:

XMLHttpRequest cannot load url Origin localhost is not allowed by Access-Control-Allow-Origin

我该如何处理这个问题?

Java 代码:

@GET
@Path("/getsample")
public Response getMsg() {
String output = "Jersey say : " ;
return Response.status(200).entity(output).build();
}

最佳答案

在此处阅读有关您的问题 CORS 的信息:http://enable-cors.org/

检查这是否对您的 getMsg() 方法有帮助:
return Response.ok(output).header("Access-Control-Allow-Origin", "*").build();

如果上述方法不起作用,请尝试将 Jersey 过滤器添加到您的服务中。创建过滤器类:

package your.package;

public class CORSFilter implements ContainerResponseFilter {

@Override
public ContainerResponse filter(ContainerRequest creq, ContainerResponse cresp) {

cresp.getHttpHeaders().putSingle("Access-Control-Allow-Origin", "*");
cresp.getHttpHeaders().putSingle("Access-Control-Allow-Credentials", "true");
cresp.getHttpHeaders().putSingle("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT, OPTIONS, HEAD");
cresp.getHttpHeaders().putSingle("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With");

return cresp;
}
}

稍后注册 win web.xml:

<servlet>
<servlet-name>CORS Filter</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name>
<param-value>your.package.CORSFilter</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>CORS Filter</servlet-name>
<url-pattern>/webservices/*</url-pattern>
</servlet-mapping>


另一种解决方案是在您的资源中使用此代码来提供 OPTIONS对于浏览器。把它放在你有@GET 的类中。

  @OPTIONS
@Path("/getsample")
public Response getOptions() {
return Response.ok()
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Methods", "POST, GET, PUT, UPDATE, OPTIONS")
.header("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With").build();
}


如果不是这个作品,尝试交换 "*"为您访问此资源的自定义域提供“Access-Control-Allow-Origin” header 。举例如果您从 http://localhost::8080 调用此电话使用这样的 ("Access-Control-Allow-Origin", "http://localhost:8080")而不是星号 "*" .

关于java - RESTful 网络服务 : how to set headers in java to accept XMLHttpRequest allowed by Access-Control-Allow-Origin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18234366/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com