0

我正在使用 Jasper 6.1 并将我的服务器配置为允许基于令牌的身份验证。当我使用令牌从浏览器登录时它工作正常。使用有效令牌,我无需输入用户名和密码即可进入系统。

现在,我将它与 Visualize.js 集成,以便在我们的应用程序网页上显示报告。以下是请求电话:-

var authToken = encodeURIComponent("u=jsmith|r=admin|exp=20150831172506-0800|t=ABC");
visualize.config({
server: "http://localhost:8080/jasperserver-pro",
scripts: "optimized-scripts",
logEnabled: true,
logLevel: "error",
auth: {
token: authToken,
preAuth: true,
tokenName: "pp"
}}, function (v) {
   $scope.v = v;
   $scope.reportingInitialized = true;
   $scope.$digest();
}, function (err) {
         alert("Auth error! Server said: " + err.message);
});

但是,在成功验证时,它不会重定向到成功 url,而是返回带有 HTTP 代码 200 的以下 html。因此,验证失败,错误消息为“意外令牌 <”。

感谢您对此的任何帮助。

<head>
<title></title>
<meta http-equiv="refresh" content="0;url=home.html">
<script language="javascript" type="text/javascript">
window.location="home.html";
</script>
</head>
<body>
If your browser doesn't automatically go there,
you may want to go to <a href="home.html">the destination</a>
manually.
</body>
</html>
4

4 回答 4

1

为了他人的利益,这是此问题的解决方案:

applicationContext-externalAuth-preAuth.xml 中缺少 jsonRedirectUrl

<property name="jsonRedirectUrl" ref="authSuccessJsonRedirectUrl"/>

还需要从该文件中删除以下行以使报告显示而不会出现任何错误:

 <!-- marker disabling JIAuthenticationSynchronizer: pre-5.1 external auth config-->
    <alias name="${bean.authenticationProcessingFilter}" alias="proxyAuthenticationProcessingFilter"/>

以上解决方案经过测试并在 Jasper Server 6.1 上运行

于 2015-09-14T14:21:21.543 回答
0

我已经安装了 JRS 6.1 并且:

  • 已经在 applicationContext-externalAuth-preAuth.xml 中

  • 我已经评论了“别名...”行

但是,当我刷新我的报告页面时,仍然没有显示报告。我必须删除我的 cookie 才能显示报告。

它真的对你有用吗?

于 2015-09-29T17:21:22.077 回答
0

我们发现问题在于第一个请求建立了一个会话。如果您在第一个会话仍处于活动状态时通过第二个请求发送新令牌,则请求将失败。您需要修改您的应用程序以继续对浏览器会话使用相同的令牌,或者您可以在发送第二个请求之前注销用户。

于 2015-10-02T13:06:59.820 回答
0

这是 Visualize.js 身份验证的预期行为,所以这里有 2 个选项,我可以在我的应用程序中使用它们

方法一

根据 Visualize.js 文档重用身份验证调用

使用可视化配置

visualize.config({
  auth: {
    token: "token",
    organization: "organization_1"
  }
});

然后使用可视化功能为报告 1 和报告 2 提供服务

// report 1
visualize(function(v) {
  v("#container1").report({
    resource: "/public/Samples/Reports/06g.ProfitDetailReport",
    error: function(err) {
      alert(err.message);
    }
  });
});

// report 2
visualize(function(v) {
  v("#container2").report({
    resource: "/public/Samples/Reports/State_Performance",
    error: function(err) {
      alert(err.message);
    }
  });
});

方法二

这种做法是不可取的。每次您想显示报告时,请执行以下操作

  • 发送登录呼叫
  • 送达报告
  • 发送注销呼叫
于 2015-11-04T17:21:41.477 回答