在JIRA REST API中启用CORS

时间:2015-11-16 19:20:56

标签: javascript cors jira-rest-api

我在Confluence用户宏中从JavaScript调用JIRA REST API并且我面临CORS问题,因为JIRA和Confluence位于两个不同的域上,而preflight request来自浏览器失败。我已经尝试了几种CORS解决方案,如下所述,没有任何成功。所以我乞求其他人可能已经解决了这个问题的一些意见。

失败的JavaScript代码段

AJS.$.ajax({
            type: "GET",
            url: "http://jira.mydomain.com/rest/api/latest/search/?jql=issue%20in%20linkedIssues(SR-45)",
            dataType: "json",
            contentType: "application/json",
            async: false
        })

错误消息(来自Firefox):

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://jira.mydomain.com/rest/api/latest/search/?jql=issue%20in%20linkedIssues(SR-45). This can be fixed by moving the resource to the same domain or enabling CORS.

JIRA配置

  • JIRA版本:6.4.12
  • 网址:http://jira.mydomain.com
  • 在前面运行Apache(代理):是的
    • 响应标头配置:
      • Access-Control-Allow-Headers:origin, content-type, accept
      • Access-Control-Allow-Methods:POST, GET, OPTIONS
      • Access-Control-Allow-Origin:*
  • Confluence添加到whitelist:是的

Confluence配置

使用浏览器进行测试:

  • Chrome(最新)
  • Safari(最新)
  • Firefox(最新)

使用CURL测试预检请求(OPTIONS):

ismar.slomic$ curl -X OPTIONS "http://jira.mydomain.com/rest/api/latest/search/?jql=issue%20in%20linkedIssues(SR-45)" -v
*   Trying 10.107.1.24...
* Connected to jira.mydomain.com (127.0.0.1) port 80 (#0)
> OPTIONS /rest/api/latest/search/?jql=issue%20in%20linkedIssues(SR-45) HTTP/1.1
> Host: jira.mydomain.com
> User-Agent: curl/7.43.0
> Accept: */*
>
* Empty reply from server
* Connection #0 to host jira.mydomain.com left intact
curl: (52) Empty reply from server

这似乎是积极的回应。

使用Crome扩展Postman测试预检请求(OPTIONS):

OPTIONS http://jira.mydomain.com/rest/api/latest/search/?jql=issue%20in%20linkedIssues(SR-45)

回应错误:Could not get any response. This seems to be like an error connecting to http://jira.mydomain.com/rest/api/latest/search/?issue%20in%20linkedIssues(SR-45)

1 个答案:

答案 0 :(得分:2)

有点迟到回答这个,但我会把它留在这里作为参考。

在我的宏中,我反过来解决了这个问题。我没有向JIRA服务器发送直接请求,而是使用Confluence服务器公开的API将我的JIRA请求代理到链接的JIRA实例。

我在another answer中描述了这个端点。使用此方法,您不会违反跨源策略。实际上,这是JIRA IssuesJIRA Chart宏用于呈现其小部件的内容。

这种方法要求JIRA和Confluence实例通过Application Link连接。但是我假设您有管理员访问JIRA和Confluence,因为您正在调查更改原始政策,因此它不应该成为您的阻止者。