由于为此而苦苦挣扎了一段时间,所以真的很感谢任何帮助...
我已将Pentaho报告加载到Pentaho Server中。这些报告通过iframe调用。
我想做的是让用户仅进行一次身份验证,因此他可以运行其他报告而不必重新进行身份验证。为此,我使用此处记录的基于Pentaho Cookie的身份验证:https://help.pentaho.com/Documentation/8.0/Developer_Center/REST_API
我的问题是: 1)我编写了一个小的php脚本,该脚本将POST请求发送到/ pentaho / j_spring_security_check。脚本不会返回任何错误,但是不会按预期将我重定向到主页。
<?php
$data = array("j_username"=>"admin", "j_password"=>"password",
"locale"=>"en_US");
$string = http_build_query($data);
echo $string;
$ch =
curl_init("http://localhost:8080/pentaho/j_spring_security_check");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $string);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
echo $ch;
$return = curl_exec($ch);
echo $return;
if (curl_errno($ch)) {
print curl_error($ch);
}
curl_close($ch);
?>
2)我尝试直接在浏览器“ http://localhost:8080/pentaho/j_spring_security_check?j_username=admin&j_password=admin”中键入内容,但得到的结果是“ login_error = 1”,而登录名和密码均正确(预期的行为将重定向到主页)
这是我第一次使用REST API,所以我可能做错了事。
非常感谢
答案 0 :(得分:1)
我错过了重复使用该cookie的步骤。
此外,使用“ curl_setopt($ ch,CURLOPT_RETURNTRANSFER,true)”有助于我理解脚本中的错误并予以解决。
正确的脚本是:
<?php
$data = array("user"=>"admin", "password"=>"admin");
// $string = http_build_query($data);
// echo $string;
$cookie_jar = tempnam('/Users/pierre/Vrac','cookie');
if (!file_exists(realpath($cookie_jar))) touch($cookie_jar);
$ch = curl_init("http://localhost:8080/pentaho/j_spring_security_check?
j_username=admin&j_password=admin&locale=en_US");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
//echo $ch;
$return = curl_exec($ch);
echo "execution report";
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_jar);
curl_setopt($ch, CURLOPT_URL,'http://localhost:8080/pentaho/api/repos/:public:IframeDossier:IframeTest.prpt/viewer?label=fin');
$page = curl_exec($ch);
echo $page;
curl_close($ch);
?>