Token based authentication to Jasper reports failing when used with visualize.js

空扰寡人 提交于 2019-12-12 02:52:22

问题


I am using Jasper 6.1 and configured my server to allow token based authentication. It works fine when i use token to login from browser. With the valid token, I am able to get into the system without entering username and password.

Now, I am integrating it with visualize.js in order to show reports on our application's web page. Below is request call :-

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);
});

However, on successful authentication it is not redirecting to success url but returning the below html with HTTP code 200. Due to which the Authentication is failing with the error message as "Unexpected token <".

Appreciate any help on this.

<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>

回答1:


Here is the resolution for this issue for other's benefit:

The jsonRedirectUrl was missing in the applicationContext-externalAuth-preAuth.xml

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

Also following lines need to be removed from this file to have the report show up without any error:

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

Above solution is tested and working on Jasper Server 6.1




回答2:


I have installed JRS 6.1 and :

  • The was already in the applicationContext-externalAuth-preAuth.xml

  • And I have commented the "alias..." line

But still, when I do refresh my report page, the report is not displayed. I have to delete my cookies so that the report appears.

Did it really work for you ?




回答3:


We found that the problem was that the first request establishes a session. If you send a new token with the second request while the first session is still active then the request fails. You need to modify your application to either continue to use the same token for the browser session or you could logout the user before sending the second request.




回答4:


This is the expected behavior with visualize.js authentication so here are 2 options which I have through of using in my application

Approach 1

Reuse authentication call as per visualize.js documentation

use visualize.configure

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

then use visualize function to serve report 1 and report 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);
    }
  });
});

Approach 2

This approach which is not desirable. every time you want to show a report do following

  • send login call
  • serve the report
  • send a logout call


来源:https://stackoverflow.com/questions/32331596/token-based-authentication-to-jasper-reports-failing-when-used-with-visualize-js

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!