Вот моя проблема: я разрабатываю систему, которую можно опрашивать для получения динамических данных. Это в Grails, и когда я делаю запрос на определенное действие контроллера, скажем "http://localhost:8080/foo/bar",, возвращается список JSON, содержащий самые последние данные.
Для дополнительной безопасности и функциональности я защитил свою страницу с помощью Spring Security (плагин Grails Acegi) с включенной базовой аутентификацией. Когда вы входите в систему, система автоматически загружает информацию о вашем профиле пользователя, и это изменяет возвращаемые данные. Итак, аутентификация обязательна.
Это работает: я могу опрашивать свои действия из любого браузера, и данные будут возвращены. В моем приложении Grails есть скрипт JavaScript, который вызывает этот URL.
Проблема в том, что я хотел бы экспортировать свой JavaScript-скрипт, чтобы распространять его среди клиентов, чтобы они могли создавать свои собственные HTML-файлы, подключать мой JavaScript-файл и иметь доступ к моим данным (вроде API). используя AJAX. Вот так:
$.ajax(url: urlWithParams,
method: 'GET',
beforeLoad: function(xhr) {
xhr.setRequestHeader('Authorization', authString);
},
success: myFunction
});
Однако это не работает. Прежде всего, я знаю, что междоменные запросы GET сложны. Но в моем случае я использую Basic Authentication, что сложнее, потому что мне нужно поместить учетные данные непосредственно в XmlHttpRequest, и это создает предварительно просвечиваемые запросы в Firefox (заменяя GET на OPTIONS), и мое приложение Grails не справляется с этим .
Моя проблема очень специфическая. Я использую базовую аутентификацию для предотвращения злонамеренного доступа, однако не могу получить доступ к своему приложению с использованием надлежащих учетных данных из-за некоторых междоменных ограничений!
Что мне делать! Я пытался использовать IFrame, но не могу получить содержимое страницы (появляется ошибка «Отказано в доступе - опять же междоменные ограничения).
Кроме того, поля имени пользователя и пароля jQuery в функции ajax () не работают.
Могу ли я выполнить простой запрос AJAX GET на незащищенной странице, отправив учетные данные в качестве параметров, а затем страница будет перенаправлена на защищенную страницу с использованием учетных данных? Браузер не будет обрабатывать запрос, но могу ли я выполнить перенаправление с учетными данными базовой аутентификации?
У меня такое чувство, что оно не будет работать (что-то связанное с перенаправлением, которое генерирует новый запрос и т. Д.). Я прав или это должно работать?
Может ли JSONP решить эту проблему? Однако я не знаю, как интегрировать базовую аутентификацию с использованием JSONP ...
Большое спасибо!