【问题标题】:How to get string query params from URL in Domino如何从 Domino 中的 URL 获取字符串查询参数
【发布时间】:2019-11-09 14:24:17
【问题描述】:

一段时间后,我设法从某些 API 进行重定向。

但是,现在我面临一个不同的问题。

似乎没有办法从 URL 中获取查询参数。

按钮看起来像这样:

 <xp:eventHandler event="onclick" submit="true"
    refreshMode="complete">
    <xp:this.action><![CDATA[#{javascript:
    var redirectUrl = context.getUrl().toString();
    var errorRedirectUrl = context.getUrl().toString();

    var EGRZAuthObject = new ru.iteko.egrz.requestprocessors.EGRZAuthorization();

    //auth which redirects
    EGRZAuthObject.initializeAuthProcess(redirectUrl, errorRedirectUrl);

    print("marker param is " + param.get("marker"));
    print("marker param is " + facesContext.getExternalContext().getRequest().getQueryString());
    print("url " + context.getUrl().toString());

    }]]></xp:this.action>
 </xp:eventHandler>

重定向的方法如下:

public static void initializeAuthProcess(String redirectUrl, String apiRedirectUrl) throws ClientProtocolException, IOException 
{
        CloseableHttpClient httpclient = HttpClients.createDefault();
        try
        {
            HttpContext context = new BasicHttpContext(); 
            String urlToGoTo = AuthURLs.ESIALoginURL(redirectUrl, apiRedirectUrl);
            HttpGet httpGet = new HttpGet(urlToGoTo);
            HttpResponse response1 = httpclient.execute(httpGet, context);

            HttpUriRequest currentReq = (HttpUriRequest) context.getAttribute( 
                     HttpCoreContext .HTTP_REQUEST);
            HttpHost currentHost = (HttpHost)  context.getAttribute( 
                        HttpCoreContext .HTTP_TARGET_HOST);
            String redirectURLEsia = (currentReq.getURI().isAbsolute()) ? currentReq.getURI().toString() : (currentHost.toURI() + currentReq.getURI());

            FacesContext fc = FacesContext.getCurrentInstance();
            ExternalContext externalContext = fc.getExternalContext();
            externalContext.redirect(redirectURLEsia);
        }
        finally
        {
            httpclient.close();
        }
}

会发生什么:

  1. 在浏览器中,用户通过按下按钮来初始化身份验证过程
  2. 然后initializeAuthProcess向系统A执行请求
  3. 系统 A 将我们带到系统 B,我们将用户重定向到那里
  4. 用户在系统B中经过授权过程
  5. 系统 B(经过身份验证)将用户重定向到我们的系统
  6. 它会在我们系统的 URL 中附加某种标记,称为 marker

稍后,我们应该对标记做点什么......

问题是我们不知道如何获取标记。它始终为 null 或为空。但是在浏览器中,我们总是可以在系统B中的auth成功完成后看到它。

我得到以下输出:

marker param is null
marker param is 
url https://oursystem.com/Nav2.xsp

我们还想知道如何在处理完成后将其从 URL 中删除。但到目前为止,我们至少需要得到它。

我们该怎么做?

提前致谢。

编辑:

显然,代码会立即执行,而无需等待系统 B 中的用户授权。

例如,如果我们再次按下按钮,我们将获得marker 参数。

所以我们需要一种不同的方法,我们应该定义标记并用它做一些事情

【问题讨论】:

    标签: xpages lotus-notes xpages-ssjs query-parameters facescontext


    【解决方案1】:

    你看错了结局。有 2 个选项:从返回的响应中选择标记 1 调用其他系统或将该代码移动到您重定向到的页面

    【讨论】:

      【解决方案2】:

      如果您单击该按钮,您将被重定向到另一个页面。因此,对标记的测试应该在 5 和 6 之间的回调步骤中进行。如果标记存在,请检查 beforeRenderResponse 事件,然后您可以对此做出反应。

      【讨论】:

        猜你喜欢
        • 2017-10-07
        • 1970-01-01
        • 2017-07-20
        • 2014-02-14
        • 1970-01-01
        • 2020-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多