Ism*_*mic 9 javascript cors jira-rest-api
我在Confluence用户宏中从JavaScript调用JIRA REST API,我面临CORS问题,因为JIRA和Confluence位于两个不同的域上,浏览器的预检请求失败.我已经尝试了几种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
})
Run Code Online (Sandbox Code Playgroud)
错误消息(来自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.
Run Code Online (Sandbox Code Playgroud)
JIRA配置
Access-Control-Allow-Headers:origin, content-type, acceptAccess-Control-Allow-Methods:POST, GET, OPTIONSAccess-Control-Allow-Origin:*汇流配置
Access-Control-Allow-Origin:*使用浏览器测试:
使用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
Run Code Online (Sandbox Code Playgroud)
这似乎是积极的回应.
使用Crome扩展测试预检请求(OPTIONS)Postman:
OPTIONS http://jira.mydomain.com/rest/api/latest/search/?jql=issue%20in%20linkedIssues(SR-45)
Run Code Online (Sandbox Code Playgroud)
回复错误: 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)
回答这个问题有点晚了,但我会把它留在这里供参考。
在我的宏中,我以相反的方式解决了这个问题。我没有直接向 JIRA 服务器发送请求,而是使用 Confluence 服务器公开的 API 将 JIRA 请求代理到链接的 JIRA 实例。
我在另一个答案中描述了这个端点。使用此方法不会违反跨域策略。事实上,这就是JIRA Issues和JIRA Chart宏用来呈现其小部件的内容。引用:
吉拉代理
另一个不错的端点是
/plugins/servlet/applinks/proxy. 它允许将简单的 REST 请求转发到链接的 JIRA 实例。例如,/plugins/servlet/applinks/proxy?appId={INSERT APPLINK ID HERE}&path=%2Frest%2Fapi%2F2%2Fsearch将调用 JIRA 的问题搜索 REST 端点并列出用户可用的问题(如在 JIRA 搜索中)。我所说的“简单请求”是指当前版本仅支持 GET 和 POST HTTP 方法(POST 仅限于application/xml和multipart/form-data内容类型)。Servlet 支持查询字符串和 HTTP 标头参数。查看插件源代码中 servlet 的源代码以获取更多信息,因为我还没有找到任何相关的在线文档。使用此 servlet,您还可以通过请求来获取项目列表
/plugins/servlet/applinks/proxy?appId={INSERT APPLINK ID HERE}&path=%2Frest%2Fapi%2F2%2FprojectServlet 在存储库中的路径是
confluence-jira-plugin/src/main/java/com/atlassian/confluence/plugins/jira/AppLinksProxyRequestServlet.java,但大多数重要的内容都在其基类中confluence-jira-plugin/src/main/java/com/atlassian/confluence/plugins/jira/AbstractProxyServlet.java
不过,这种方法需要通过应用程序链接连接 JIRA 和 Confluence 实例。但我假设您在调查更改源策略时拥有 JIRA 和 Confluence 的管理员访问权限,因此它不应该成为您的障碍。
| 归档时间: |
|
| 查看次数: |
4022 次 |
| 最近记录: |