KeyCloak - приложение для загрузки Javascript и Spring

Я настроил и настроил сервер keycloak. Мое приложение состоит из одной html-страницы, развернутой на HTTP-сервере apache, который находится на том же компьютере, что и на сервере keycloak. Эта HTML-страница выполняет вызов REST json ajax для получения данных. HTML-страница защищена с помощью адаптера JS, а остальные службы доступны с помощью приложения загрузки Spring и защищены с помощью адаптера загрузки Spring.

Keycloak имеет одного клиента, для которого настроены клиентские адаптеры.

Теперь адаптер js отлично работает file. Он перенаправляет на страницу входа, а после входа в систему перенаправляет на требуемую страницу. Адаптер загрузки Spring также отлично работает. Когда мы выполняем GET для веб-службы, она перенаправляется на страницу входа, и после ввода учетных данных веб-служба передает ответ.

Проблема в том, что когда HTML-страница вызывает эту веб-службу с помощью AJAX, она не работает.
Поэтому, когда я ввожу учетные данные на сервере скрытия ключей и при перенаправлении на html-страницу, html-странице не удается выполнить вызов ajax. Код ответа - 302, и он перенаправляется в службу аутентификации keycloak (во время вызова ajax).

У меня такой вопрос:
* Если моя html-страница и спокойная веб-служба используют один и тот же клиент keycloak, разве мне не нужно входить в систему один раз? * Если оба (html и веб-сервис) аутентифицируются отдельно и являются рабочим файлом, то почему он не работает, когда я просто вхожу на страницу html?
* Есть ли другой способ решить эту проблему?


person Snake Eye    schedule 20.05.2015    source источник


Ответы (1)


Решение было довольно простым. Мне пришлось использовать jsonp вместо запроса json ajax.
Я добавил dataType: "jsonp" в вызове ajax и использовал совет Spring 4 для поддержки поддержки jsonp на стороне сервера.
Код совета:

@ControllerAdvice
public class JsonpAdvice extends AbstractJsonpResponseBodyAdvice {
public JsonpAdvice() {
    super("callback");
    }
}

Код Javascript:

$(document).ready(function() {
$.ajax({
    url: "http://localhost:8081/hello-world/",
    dataType:"jsonp"
}).then(function(data) {
   $('.greeting-id').append(data.id);
   $('.greeting-content').append(data.content);
});

});

Следование по ссылке мне очень помогло:

Почему метод jquery .ajax () не отправляет мой сеанс cookie?

person Snake Eye    schedule 22.05.2015