经过一段时间,我设法从某些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();
}
}
发生了什么:
initializeAuthProcess
执行对系统A的请求marker
的令牌稍后,我们应该对标记做些事情...
问题是我们不知道如何获得标记。它始终为null或为空。但是,在浏览器中,成功完成系统B中的身份验证后,我们始终可以看到它。
我得到以下输出:
marker param is null
marker param is
url https://oursystem.com/Nav2.xsp
我们还想知道如何在处理完成后将其从URL中删除。但是到目前为止,我们至少需要得到它。
我们该怎么做?
提前感谢。
编辑:
显然,在系统B中,无需waiting就可以立即执行代码而无需用户进行授权。
例如,如果我们再次按下按钮,我们将获得marker
参数。
所以我们需要一种不同的方法,在那里我们应该定义标记并对其进行处理
您看错了结局。有2个选项:从返回的response1中选择标记,调用其他系统,或将代码移到您重定向到的页面上