0

Jasper 6.1 を使用しており、トークン ベースの認証を許可するようにサーバーを構成しています。トークンを使用してブラウザからログインすると、正常に動作します。有効なトークンがあれば、ユーザー名とパスワードを入力せずにシステムに入ることができます。

現在、アプリケーションの Web ページにレポートを表示するために、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

問題は、最初のリクエストがセッションを確立することにあることがわかりました。最初のセッションがまだアクティブな間に 2 番目のリクエストで新しいトークンを送信すると、リクエストは失敗します。ブラウザー セッションで同じトークンを引き続き使用するようにアプリケーションを変更するか、2 番目の要求を送信する前にユーザーをログアウトする必要があります。

于 2015-10-02T13:06:59.820 に答える
0

これは、visualize.js 認証で想定される動作であるため、アプリケーションで使用した 2 つのオプションを次に示します。

アプローチ1

Visualize.js のドキュメントに従って認証呼び出しを再利用する

Visualize.configure を使用する

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

アプローチ 2

このアプローチは望ましくありません。レポートを表示するたびに、次のことを行います

  • ログインコールを送信
  • レポートを提供する
  • ログアウト コールを送信する
于 2015-11-04T17:21:41.477 に答える