Java 调用api cors域

Java 调用api cors域,java,cors,axios,Java,Cors,Axios,我对cors有问题。 我想从另一个域2调用另一个域1(无法更改为https)上的端点 可能吗 我有一个错误: > Access to XMLHttpRequest at > 'http://192.168.1.140:8090/app1/auth/login' from origin 'http://app2' > has been blocked by CORS policy: Response to preflight request doesn't > pass a

我对cors有问题。 我想从另一个域2调用另一个域1(无法更改为https)上的端点

可能吗

我有一个错误:

> Access to XMLHttpRequest at
> 'http://192.168.1.140:8090/app1/auth/login' from origin 'http://app2'
> has been blocked by CORS policy: Response to preflight request doesn't
> pass access control check: No 'Access-Control-Allow-Origin' header is
> present on the requested resource
App1:vuejs与axios

axios
.post('/auth/login', {
    username: username,
    password: password
})
App2:java与jersey

更新19/03 15:40:

    @OPTIONS
@Path("/login")
public Response login() {
        return Response.status(200).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();
}


@POST
@Consumes("application/x-www-form-urlencoded")
@Produces("application/json")
@Path("/login")
public Response login(@FormParam("username") String username, @FormParam("password") String password) {
    return Response
        .status(200)
        .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();
}
更新19/03 16:08

我在vuejs中删除了两行

window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
window.axios.defaults.headers.common['Authorization'] = 'Bearer ' + localStorage.token;
现在可以工作了,但如何从https调用http端点?


谢谢

查看浏览器中的网络选项卡(Chrome中的Control-Shift-J>网络)。您看到的第一件事可能是对您的登录URL的请求

但是,如果您查看该方法,它是一个选项请求,而不是POST请求。我猜它会返回404或405错误,这两个错误都没有您之前添加的CORS头

您需要向资源中添加选项方法。大概是这样的:

@OPTIONS//OPTIONS而不是post
@路径(“/login”)
公共响应登录选项(){//此处无参数
返回响应
.现状(200)
.header(“访问控制允许原点”、“*”)
.header(“访问控制允许方法”、“发布、获取、放置、更新”)
.header(“访问控制允许头”,“内容类型,接受,X请求的带”)
.build();
}

,它是一个单独的类,用于为对代码进行的任何选项调用返回此响应。

您需要有处理选项请求的代码,而不仅仅是POST。这是因为问题中引用的错误消息表明浏览器在您的前端代码中尝试POST请求之前正在发出CORS飞行前选项请求。但预飞失败,因为浏览器收到的预飞选项请求响应不包括访问控制允许原点响应标头。所以浏览器就停在那里,永远不会继续尝试POST请求。请参阅“谢谢您的帮助”上的答案。我更新了帖子。还是不行,谢谢你的回答。我已经解决了我的问题。window.axios.defaults.headers.common['X-request-With']='XMLHttpRequest';window.axios.defaults.headers.common['Authorization']='Bearer'+localStorage.token;我删除了两行。但是现在我如何从https调用http端点呢?