Javascript 非管理员状态下的confluence REST API请求以401错误结束

Javascript 非管理员状态下的confluence REST API请求以401错误结束,javascript,ajax,jira,confluence,confluence-rest-api,Javascript,Ajax,Jira,Confluence,Confluence Rest Api,我正在开发汇流蓝图,用户可以在jira项目之间进行选择,并将其用于特定的jira问题报告 这两个实例都彼此正确连接,并且只有当我以管理员身份登录时,我才能获得结果。对于普通用户,我得到以下信息: <status> <status-code>401</status-code> <message>This resource requires WebSudo.</message> </status> 我曾尝试在aja

我正在开发汇流蓝图,用户可以在jira项目之间进行选择,并将其用于特定的jira问题报告

这两个实例都彼此正确连接,并且只有当我以管理员身份登录时,我才能获得结果。对于普通用户,我得到以下信息:

<status>
   <status-code>401</status-code>
   <message>This resource requires WebSudo.</message>
</status>
我曾尝试在ajax中使用基本身份验证的登录信息,但没有帮助。当然我可以在代码中硬编码id,但是如果它被更改了怎么办?在我看来,这不是最好的解决方案。我如何处理websudo问题

谢谢你,祝你圣诞快乐,新年快乐。

我是新来的(作为一名撰稿人),所以请原谅我的新手

看起来访问
/rest/applinks/1.0/applicationlink/type/jira
确实需要管理员权限。但是有一个未记录的(AFAIK)解决方法,我就是这样做的

有一个Atlassian插件名为
Confluence JIRA插件
。它与Confluence捆绑在一起(因此应该在您的安装中提供)。它为您提供了一些允许JIRA集成的酷特性(例如JIRA和JIRA图表宏)。为了提供集成,它还向Confluence REST API(不需要管理员访问)添加了一些有用的端点:

  • /rest/jiraanywhere/1.0/servers
    /rest/jira integration/1.0/servers
    列出链接的jira服务器(包括applink id)
  • /jira integration/1.0/servers/{INSERT APPLINK ID HERE}/projects
    列出登录用户可用的jira项目
  • 现在,根据你的要求,我已经达到了1。获取applink id,然后选择2。获取项目列表。希望它适用于您的产品版本

    奖金-吉拉代理 另一个不错的端点是
    /plugins/servlet/applinks/proxy
    。它允许将简单的REST请求转发到链接的JIRA实例。例如
    /plugins/servlet/applinks/proxy?appId={INSERT APPLINK ID HERE}&path=%2Frest%2Fapi%2F2%2Fsearch
    将调用JIRA并列出用户可用的问题(如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%2Fproject

    servlet在repo中的路径是
    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

    function pickDate(e, state) {
        AJS.$('#spLebenStart').datePicker({
            overrideBrowserDefault: true
        });
    
        getJiraUrl();
    }
    
    function getJiraUrl(){
        var appUrl = AJS.contextPath() + "/rest/applinks/1.0/applicationlink/type/jira";
    
        $.ajax({
            type: 'GET',
            url: appUrl,
            data: {
                key: "value"
            }, 
            dataType: "xml",
            success: function (xml){
                jiraID = $(xml).find("id").text();
            },
            complete: function(){
                getJiraProjects(jiraID);
            },
            error: function() {
                alert("ERROR @ getJiraUrl");
            }
        });
    }
    
    function getJiraProjects(applicationId){
        var restUrl = AJS.contextPath() + "/rest/applinks/1.0/entities/"+applicationId+"?os_authType=any";
    
        $.ajax({
            type: 'GET',
            url: restUrl,
            data: {
                key: "value"
            },
            dataType: "xml",
            success: function (xml){
                jiraProjectKeys = [];
                $(xml).find("entity").each(function(){
                    jiraProjectKeys.push({id: $(this).attr("key"), text: $(this).attr("name")});
                });
            },
            crossDomain: true,
            xhrFields: {
                withCredentials: true
            },
            error: function() {
                alert("ERROR @ getJiraProjects");
            },
            complete: function(){
                AJS.$('#spSelect').auiSelect2({
                    placeholder: 'Projekt auswählen...',
                    data:jiraProjectKeys,
                    multiple: false
                });
            }
        });
    }