我们公司正在使用JIRA6.4.5,但我很难从它的API接口中获取数据。在过去的几天里,我一直在尝试,被一个跨域问题困住了,或者我不知道用户凭证,所以我也不能做任何服务器端。
理想情况下,我有一个jQuery页面,用户将使用自己的凭据/会话查询JIRA数据。JIRA位于srv1.mydomain.xyz上,我在代码中使用srv2.mydomain.xyz作为我的REST服务器。
我读过JIRA REST引用。
我尝试过各种Javascript/jQuery内容--在下面的示例中,我尝试提交一个特定问题的1小时30分钟:
$.ajax({
url: "https://srv1.mydomain.xyz/rest/api/latest/issue/proj-3/worklog",
dataType: "json",
method: "post",
data: { time: "1h 30m",
comment: "Test" }
}).done(function(data) {
alert("Success");
}).fail(function(jqXHR, textStatus) {
alert("Failed");
});我知道这个错误:
XMLHttpRequest无法加载https://srv1.mydomain.xyz/rest/api/latest/issue/proj-3/worklog?time=1h+30m&comment=Test。请求的资源上没有“访问-控制-允许-原产地”标题。因此,“https://srv2.mydomain.xyz”源是不允许访问的。响应具有HTTP状态代码401。
然后,我对此进行了更深入的研究,发现亚特兰蒂斯有一个名为“亚特兰西安连接”的东西,因此我尝试了这样的方法:
AJS.$.ajax({
url: "https://srv1.mydomain.xyz/rest/api/latest/issue/proj-3/worklog",
type: "post",
dataType: "json",
contentType: "application/json",
xhrFields: { withCredentials: true },
async: false,
method: "post",
data: { time: "1h 30m",
comment: "Test" }
}).done(function(data) {
alert("Success");
}).fail(function() {
alert("Failed");
});但我也有一个类似的错误:
XMLHttpRequest无法加载https://srv1.mydomain.xyz/rest/api/latest/issue/proj-3/worklog。对飞行前请求的响应不会通过访问控制检查:请求的资源上没有“访问-控制-允许-原产地”标题。因此,“https://srv2.mydomain.xyz”源是不允许访问的。
我还研究过是否可以在与JIRA服务器相同的域中使用启用PHP的服务器端,但是由于在执行base64时没有获得phpinfo()编码的凭据,所以我认为也不能使用这种方法(而且我不想提示用户提供凭据)。
我痛苦地意识到,我的问题与跨域保护有关,但我找不到任何如何解决它的例子。如果JIRA服务器能够为某些主机设置一个Access-Control-Allow-Origin,那就太好了,但是我假设这不是一个配置选项(我没有控制JIRA服务器)。
发布于 2016-04-29 04:06:53
这绝对是一个跨领域的案子。相信我,它的存在是为了你自己的保护;)
我使用的方法是将jQuery请求发送到基于服务器的处理页面,然后该页面与Jira服务器进行身份验证和交互。在您的示例中,由于srv1和srv2位于同一个域中,所以srv2 (webserver)可以使用内部In (例如https://10.50.25.87:8080/rest/api/latest/issue/proj-3/worklog)与srv1 (Jira)对话,因此跨域问题不适用。
https://stackoverflow.com/questions/34015626
复制相似问题