我正在使用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。由于验证失败,错误消息为“Unexpected token<”。
感谢您的任何帮助。
<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>
答案 0 :(得分: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上运行
答案 1 :(得分:0)
我已经安装了JRS 6.1和:
在 已经在applicationContext-externalAuth-preAuth.xml
我评论了#34;别名......&#34;行
但是,当我刷新报告页面时,报告不会显示。我必须删除我的cookie才能显示报告。
它真的对你有用吗?
答案 2 :(得分:0)
我们发现问题是第一个请求建立了一个会话。如果在第一个会话仍处于活动状态时发送带有第二个请求的新令牌,则请求将失败。您需要修改应用程序以继续对浏览器会话使用相同的令牌,或者在发送第二个请求之前注销用户。
答案 3 :(得分:0)
这是visualize.js身份验证的预期行为,所以这里有2个选项,我在我的应用程序中使用
方法1
根据visualize.js文档重用身份验证调用
使用visualize.configure
visualize.config({
auth: {
token: "token",
organization: "organization_1"
}
});
然后使用visualize函数来提供报告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);
}
});
});
方法2
这种方法是不可取的。每次要显示报告时都要执行以下操作