Хорошая идея - запустить устаревшее приложение Spring MVC + JSP вместе с приложением Angular? - PullRequest
0 голосов
/ 12 февраля 2020

У нас есть запрос на перенос только части устаревшей системы в приложение angular 8.

Пожилые люди предлагают изменить URL-адрес в сторону JSP, чтобы указать на новый angular приложение и сделать макет нового приложения похожим на старый JSP.

Сложность в том, что я не знаю, как эффективно синхронизировать c состояние между JSP и angular, потому что мы должны сделать так, чтобы два клиента (JSP и angular) выглядели как один. Это включает в себя аутентификацию, ввод формы, состояние панели навигации и т. Д. c ...

Что касается аутентификации, первое предлагаемое решение заключается в клонировании страницы входа из JSP и предоставлении API для входа в систему для angular приложение и вернуть токен JWT. Но я не думаю, что это будет работать хорошо, потому что мы должны синхронизировать c статус входа / выхода между двумя приложениями. Второе предлагаемое решение - позволить старому приложению позаботиться об аутентификации и добавить токен jwt к каждому URL, который ссылается на приложение angular. Боюсь, что при таком подходе у нас будут проблемы с безопасностью и ограничение длины URL.

У кого-нибудь раньше была эта проблема? Как ты это решил? Вы предлагали полную миграцию на angular?

Ответы [ 2 ]

1 голос
/ 12 февраля 2020

Для любого веб-приложения, которое достигло определенного размера, такая миграция является единственным способом продвижения вперед, поскольку приложение слишком велико, чтобы его можно было заменить сразу. Таким образом, сосуществование между старыми и новыми страницами должно быть достигнуто.

Самый простой подход состоит в том, что каждая страница либо полностью JSP, либо полностью Angular, то есть не содержит никакого сочетания технологий. Как вы уже определили, макет Angular должен быть достаточно близок к макету JSP, чтобы пользователи воспринимали его как одно приложение. Но каждый раз, когда пользователь переключается с JSP на страницу Angular, он / она испытывает задержку при загрузке приложения Angular и всех связанных с ним данных. Потребуются некоторые усилия, чтобы сделать go достаточно быстрым.

Если вам нужно совместно использовать состояние (в дополнение к аутентификации), вам нужно будет реализовать API в контейнере JSP, чтобы Angular приложение может получить состояние и изменить его. Вы, вероятно, обнаружите, что необходимо предоставить общий доступ только к небольшому подмножеству состояний.

Для аутентификации простейшая настройка заключается в том, если приложение Angular может получить доступ ко всем API-интерфейсам с помощью Cook Cooking ie. Тогда вам не нужно ничего делать. Никакой новой страницы аутентификации не требуется, и JWT не нужно передавать.

Если требуется JWT, лучшее решение - настроить выделенный IAM (управление идентификацией и доступом), отвечающий за аутентификацию. Он реализует страницу входа в систему и выдаст JWT. Если неаутентифицированный пользователь запрашивает страницу JSP, он / она перенаправляется в IAM, входит в систему и перенаправляется обратно в приложение JSP. Приложение JSP проверяет логин. Если этот же пользователь позже откроет страницу Angular, а странице Angular потребуется доступ к API, пользователь сначала будет перенаправлен в IAM. Поскольку IAM предоставляет средство единого входа, он обнаружит действительный сеанс пользователя и немедленно выдаст JWT (или код аутентификации), не показывая страницу входа в систему. В обоих случаях используется поток OAUTH 2 / OID C. И оба случая хорошо поддерживаются многими фреймворками и библиотеками. OID C также включает функции для синхронизации выхода из системы.

1 голос
/ 12 февраля 2020

Не очень хорошая идея, но устаревшие приложения столкнутся с подходом «лифт-и-сдвиг» для адаптации к новым технологиям. Мы выполнили аналогичное упражнение в React.

JSP обрабатывается на стороне сервера. Вы собираетесь с Angular SSR? В случае Angular обработки на стороне клиента вы можете использовать session / cook ie для обмена пользовательской информацией, такой как JWT, а также для обработки состояний.

Нам пришлось перенести только проблему, из-за которой медленные страницы реагировали. Мы использовали Redux для государства. Удалена вся страница JSP и разработан соответствующий компонент React, поэтому вызовы API поступают из React. Некоторые ссылки вызывают страницы JSP - лишь немногие используют http-сеансы для передачи данных. Для нескольких сложных json массивов (для которых требуется многократное добавление перед отправкой в ​​бэкэнд) данные хранятся в Redis и извлекаются бэкэндом и с любой страницы JSP.

Все приложение развертывается как одиночная весенняя загрузка при загрузке.

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