Оформление
iframe кросс-доменная единая регистрация
1. Обзор
1.1 Описание проблемы
На предприятиях часто используется несколько BI-платформ или несколько связанных платформ, и пользователи хотят входить в систему только один раз для доступа к другим системам, например, входить в систему OA, одновременно входя в BI-систему, т.е. вводимые имя пользователя и пароль будут также отправлены в BI-систему для аутентификации, так что им не нужно будет входить в систему снова при доступе к BI-системе.
В предыдущем разделе мы представили кросс-доменный асинхронный единый вход Ajax, так как же добиться кросс-доменного единого входа для OA-системы и BI-системы через iframe?
1.2 Идеи для решений
В интерфейсе входа в систему OA BI сначала вставляет адрес проверки разрешения в виде iframe, чтобы решить проблему кросс-домена, а затем запускает событие входа в форму в iframe, чтобы реализовать переход на страницу входа.
2. Примеры
Запустите два проекта с номерами портов 37799 и 8080 соответственно, поместите только что созданный HTML-файл iframe.md в проект с номером порта 37799, перейдите по адресу http://localhost:37799/webroot/iframe.md и введите имя пользователя и пароль проекта 8080 для успешного доступа к проекту 8080. пароль для проекта 8080, а затем успешно получите доступ к проекту 8080.
Откройте новую вкладку в браузере, где вход был успешным, посетите http://localhost:37799/webroot/decision/logout/cross/domain, перейдите на страницу проекта 8080, где вход был успешным ранее, обновите страницу, и пользователя выкидывает из логина.
2.1 Подготовка окружающей среды
1) Для примера в этой статье подготовлены два проекта:
Примечание: Оба проекта должны иметь одинаковые имя пользователя и пароль.
- Локальный проект, номер порта 37799
- Проект, развернутый в Tomcat на порту 8080.
Развертывание сервера Tomcat см. в разделе: Развертывание сервера Tomcat
2) Запустите два проекта.
2.2 Новая страница входа в систему
Создайте новый HTML-файл с именем "iframe.md" со следующим кодом:
Примечание: Измените путь доступа или номер порта в коде в соответствии с реальной ситуацией.
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type"&
nbsp;content="text/html; charset=UTF-8"> <meta http-equiv="X-UA-Compatible"
content="IE=10" /> <script type="text/javascript">
function doSubmit() { var
username = document.getElementById("username").value; //Получаем введенное имя пользователя  
; var password = document.getElementById("password").value; //Получение входного параметра   nbsp; var scr = document.createElement("iframe"); var scr = document.createElement("iframe");  
nbsp; //создаем iframe scr.src = "http://localhost. 8080/webroot/decision/login/cross/domain?fine_username=" + encodeURIComponent(username) + "&fine _password=" + encodeURIComponent(password) + "&validity=" + -1 + "
&callback=callback"; // Указываем адрес, по которому отчет проверяет имя пользователя и пароль, на этот iframe if (
scr.attachEvent) { // определяем, является ли это ie-браузером   ; scr.attachEvent("onload", function()) { //Если это ie
браузер, то страница будет выполнена, как только она закончит загрузку   ; window.location="onload", function() { //Проверьте, является ли это ie-браузером
nbsp; window.location="http://localhost:8080/webroot/decision"; //Переход непосредственно к системе принятия решений &
nbsp; }); &
nbsp; } else {   ; scr.onload = function(){ //другое
Затем браузер перезагружает событие onload
/* Переход на указанную страницу успешного входа, index.jsp  
; var f = document.getElementById("login");   nbsp; f.submit(); */ window.location="login"; f.submit(); f.submit()
*/ window.location="http://
localhost:8080/webroot/decision"; // Переход непосредственно к системе принятия решений }
; } & nbsp; document.getElementsByTagName("head")[0].appendChild(scr); //Встраиваем теги iframe в head &
nbsp; } </script> </
head> <body> <p>Пожалуйста, войдите в систему</p>&
nbsp; <form id="login" name="login" method=""
POST" action="" > <p>Имя пользователя:<input id="username"&
nbsp;type="text" name="username" /></p> &
></p> <input type="button"
value="Login" onClick="doSubmit()" /> </form>&
nbsp; </body> </html>Код Описание:
Когда пользователь вводит имя пользователя и пароль и нажимает кнопку submit или login, выполняется функция doSubmit(), которая сначала создает iframe, затем указывает адрес аутентификации для BI для проверки имени пользователя и пароля на src этого iframe, делает вывод об используемом браузере (поскольку каждый браузер регистрирует стиль написания как неодинаковый), а затем добавляет этот тег iframe в тег head.
Примечание: форма имени пользователя и пароля использует кнопку для запуска doSubmit(), вам просто нужно добавить doSubmit() на страницу входа в систему вашего OA, чтобы упростить работу, полный код не переходит на указанную страницу, а непосредственно на страницу платформы.
2.3 Размещение HTML-файла в определенном месте
Назовите HTML-файл iframe.md и поместите его в папку %BI_HOME%/webapps/webroot проекта на порт с номером 37799, как показано ниже:

2.4 Эффекты просмотра
1) Зайдите на сайт http://localhost:37799/webroot/iframe.md и введите учетную запись и пароль проекта 8080, чтобы успешно получить доступ к проекту 8080. Как показано на рисунке ниже:
Примечание: Если вы не можете получить доступ, попробуйте отключить кнопки "Защита от атак Clickjacking" и "Защита от атак Content Sniffing" в обоих проектах.

2) Откройте новую вкладку в браузере, где вход был успешным, посетите http://localhost:37799/webroot/decision/logout/cross/domain, перейдите на страницу проекта 8080, где вход был успешным ранее, обновите страницу, и пользователя выкидывает из логина. Как показано на рисунке ниже:
