1

我有一个显示表单对话框的 ScriptRunner 片段。这是代码:

import com.onresolve.scriptrunner.runner.rest.common.CustomEndpointDelegate
import groovy.transform.BaseScript

import javax.ws.rs.core.MediaType
import javax.ws.rs.core.MultivaluedMap
import javax.ws.rs.core.Response

@BaseScript CustomEndpointDelegate delegate

showCloneEazyBIAccounts() { MultivaluedMap queryParams ->

def dialog =
    """<section role="dialog" id="sr-dialog" class="aui-layer aui-dialog2 aui-dialog2-medium" aria-hidden="true" data-aui-remove-on-hide="true">
        <header class="aui-dialog2-header">
            <h2 class="aui-dialog2-header-main">Clone EazyBI Accounts by Model</h2>
            <a class="aui-dialog2-header-close">
                <span class="aui-icon aui-icon-small aui-iconfont-close-dialog">Close</span>
            </a>
        </header>
        <div class="aui-dialog2-content">
            <form class="aui" action="/rest/scriptrunner/latest/custom/cloneJE2Cube" method="post">
                <div class="field-group">
                    <label for="accountNames">Account Names <span class="aui-icon icon-required"></span></label>
                    <input class="text medium-field" type="text"id="accountNames" name="accountNames" placeholder="Cubo 1, Cubo 2...">
                </div>
                <div class="field-group">
                    <label for="projectKeys">Project Keys <span class="aui-icon icon-required"></span></label>
                    <input class="text medium-field" type="text"id="projectKeys" name="projectKeys" placeholder="JESC, JEBACK....">
                </div>
                <div class="field-group">
                    <label for="model">Model <span class="aui-icon icon-required"></span></label>
                    <select class="select" id="model" name="model">
                        <option>Select</option>
                        <option>JESC</option>
                        <option>JEBACK</option>
                        <option>COM</option>
                        <option>AGILE</option>
                    </select>
                </div>
                <div class="buttons-container">
                    <div class="buttons">
                        <input class="button submit" type="submit" value="Clone" id="clone-button">
                    </div>
                </div>
            </form>
        </div>
        <footer class="aui-dialog2-footer">
             <div class="aui-dialog2-footer-hint"></div>
        </footer>
    </section>
    """

Response.ok().type(MediaType.TEXT_HTML).entity(dialog.toString()).build()
}

我需要此表单将数据发送到另一个自定义休息端点(当我从邮递员调用它时它工作正常),但是当我提交此对话框时,它显示“XSRF 检查失败”。

有没有办法让它工作?

最好的问候,埃洛伊。

4

3 回答 3

4

最后,我解决了使用 AJAX 发送请求并添加标头的问题:{'X-Atlassian-Token':'nocheck'}。

希望这可以帮助!

于 2020-05-07T14:43:15.327 回答
0

这是因为您的浏览器添加了标头,在这种情况下,我认为问题是User-Agent标头,如果它不能解决问题,请将其覆盖为虚拟的东西 打开浏览器的网络工具并覆盖所有自定义标头由您的浏览器添加。

于 2020-05-06T10:05:21.517 回答
0

我知道这是一个非常古老的问题,但我也偶然发现了这个问题,我想我也许可以帮助有同样问题的人。在我们的案例中,有两种可能的解决方案。 

  • 更改用户代理标头(据我所知,在 Chrome 中不可能)

  • 将 Jira 中的源域列入白名单/允许名单。当您向 Jira API 发送请求时,您的浏览器会自动填充“origin”标头。您需要将该值添加到 Jira 中的白名单/白名单中。-> 见这里: https ://confluence.atlassian.com/adminjiraserver073/configuring-the-allowlist-1014667631.html 类型“域”应该可以工作。

请参阅 Atlassian 记录的问题: https ://confluence.atlassian.com/jirakb/rest-api-calls-with-a-browser-user-agent-header-may-fail-csrf-checks-802591455.html

于 2021-08-17T10:02:12.033 回答