gpt4 book ai didi

Jersey - 对预检请求的响应未通过访问控制检查 : No 'Access-Control-Allow-Origin'

转载 作者:行者123 更新时间:2023-12-01 23:41:52 26 4
gpt4 key购买 nike

错误截图:

enter image description here

以下是我为 @OPTIONS 方法编写代码的 API 类。

@OPTIONS 
public Response OptionsFirstRequst(){
return Response.ok()
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Methods", "*")
.header("Access-Control-Allow-Headers", "*").build();
}

我创建了一个名为 Response Builder 的类,使用它为每个请求发送响应。
以下是 Response Builder 类的代码:
    public class ResponseBuilder {

public int status;
public HashMap data;
public String error;

public static Response ok(int Status_code, HashMap<String, String> data, String Response_error) {
if (data == null) {
data = new HashMap();
}

ResponseBuilder response = new ResponseBuilder();
response.status = Status_code;
response.data = data;
response.error = Response_error;

return Response.status(Status_code).entity(response)
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Methods", "*")
.header("Access-Control-Allow-Headers", "*").build();
}

public static Response error(int Status_code, HashMap<String, String> data, String Response_error) {
if (data == null) {
data = new HashMap();
}

ResponseBuilder response = new ResponseBuilder();
response.status = Status_code;
response.data = data;
response.error = Response_error;
response.data = new HashMap();

return Response.status(Status_code).entity(response)
.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Methods", "*")
.header("Access-Control-Allow-Headers", "*").build();
}

}

我还有一个请求过滤器,它验证每个请求的 token ,登录除外。

我能够登录,生成 token 并将其返回给浏览器。
但是登录后,如果我点击个人资料。

我得到的响应为 200(如浏览器的开发工具网络所示),但我没有得到任何数据/正确的响应。

我收到以下错误。

对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin” header 。

最佳答案

要检查和添加 CORS header ,常见的解决方案是使用 javax.ws.rs.container.ContainerResponseFilter .这是一个示例,其中允许的来源配置在类 ApplicationConfig.accessControlAllowedOrigins 中。 :

import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.ext.Provider;
import java.io.IOException;

@Provider
public class ResponseCorsFilter implements ContainerResponseFilter {

@Override
public void filter(ContainerRequestContext requestContext,
ContainerResponseContext responseContext) throws IOException {

MultivaluedMap<String, Object> responseHeaders = responseContext.getHeaders();
String origin = requestContext.getHeaderString("Origin");
if (null != origin &&
(ApplicationConfig.accessControlAllowedOrigins.contains(origin) ||
ApplicationConfig.accessControlAllowedOrigins.contains("*"))) {

responseHeaders.putSingle("Access-Control-Allow-Origin", origin);
responseHeaders.putSingle("Access-Control-Allow-Methods",
"GET, POST, OPTIONS, PUT, DELETE, HEAD");

String reqHead = requestContext.getHeaderString(
"Access-Control-Request-Headers");

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

关于Jersey - 对预检请求的响应未通过访问控制检查 : No 'Access-Control-Allow-Origin' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36613840/

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