2015-09-01 5 views
0

Я использую Jasper 6.1 и настроил свой сервер, чтобы разрешить аутентификацию на токене. Он отлично работает, когда я использую токен для входа в браузер. Имея действующий токен, я могу войти в систему без ввода имени пользователя и пароля.Аутентификация на основе токенов для отчетов Jasper не работает при использовании с visualize.js

Теперь я интегрирую его с visualise.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, но возвращение ниже HTML с HTTP кодом 200. В связи с которой аутентификация неисправного с сообщением об ошибке, как «Нечаянная знак < ".

Цените любую помощь по этому вопросу.

<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

На отладке этой проблемы, нашел, что вышеуказанная проблема происходит, когда есть уже активный сеанс. В приведенном ниже коде рассматривается эта проблема (хотя это и не самый лучший способ ее решить) '$ (window) .bind ('beforeunload', function() { visualize (function (v) { v.logout(); }) }); ' –

+0

После этого исправления после аутентификации запрос [http: // /jasperserver-pro /? Pp = ] перенаправляется на [http: // /JasperServer-pronull]. Не уверен, откуда он получает нуль в URL. Цените любую помощь по этому поводу. –

ответ

1

Вот решение этой проблемы для другого преимущества:

jsonRedirectUrl пропал без вести в ApplicationContext-externalAuth-preAuth.xml

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

Также следующие строки необходимо для удаления из этого файла, чтобы отчет отображался без ошибок:

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

Над раствором проверена и работает на сервере Jasper 6,1

0

Я установил JRS 6,1 и:

  • уже в ApplicationContext-externalAuth-preAuth.xml

  • И я прокомментировал строку «псевдоним ...»

Но все же, когда я обновляю страницу своего отчета, отчет не отображается. Мне нужно удалить мои файлы cookie, чтобы появился отчет.

Действительно ли это работает для вас?

+0

Если вы уже прошли аутентификацию, используйте тот же токен. Если для каждого доступа к отчету вы пытаетесь выполнить аутентификацию, тогда отчет не будет загружаться. –

+0

@ jade-jaber На самом деле это ожидаемое поведение с visualize.js. Как сказал Дхармвейер Джайн. Вы не должны отправлять второй аутентификационный вызов с тем же токеном –

0

Мы обнаружили, что проблема в том, что первый запрос устанавливает сеанс. Если вы отправляете новый токен со вторым запросом, пока первый сеанс все еще активен, запрос не выполняется. Вам необходимо изменить приложение, чтобы либо продолжать использовать тот же токен для сеанса браузера, либо вы можете выйти из системы перед отправкой второго запроса.

0

Это ожидаемое поведение с аутентификацией visualize.js так вот 2 варианта, которые я через использование в моем приложении

подход 1

вызова аутентификации Многократной как в 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); 
 
    } 
 
    }); 
 
});

подход 2

Этот подход, который нежелателен. каждый раз, когда вы хотите, чтобы показать отчет сделайте следующее

  • отправить Войти вызов
  • служить доклад
  • отправить выход из системы вызова