Я пытаюсь интегрировать очень старое веб-приложение Java и интерфейс AngularJs. Я не могу использовать Spring framework и в основном должен кодировать фрагменты вручную. Вот мои конкретные вопросы:
Я отправляю форму входа в сервлет для проверки подлинности, сервлет отвечает с объектом разрешения и Jsessionid. Как я могу избежать повторного входа в систему, когда я ухожу и вернусь на страницу? Нужен ли мне другой файл cookie для хранения имени пользователя и пароля?
Как обеспечить защиту CSRF с помощью этой архитектуры?
Пример будет очень высоко оценен.
Я фактически реализовал два решения с использованием JWT, а другой - с помощью традиционной реализации Java Servlet с использованием Jsessionid cookie. Пока я чувствую, что cookie - это чище, поэтому вот некоторые подробности:
Login.html отправляет имя пользователя/пароль в сервлет. Сервлет проверяет учетные данные и при успешном запуске нового сеанса (что приводит к созданию файла cookie jsessionid). Если аутентификация завершается с ошибкой, возвращается HttpServletResponse.SC_UNAUTHORIZED.
а. Если обратный вызов успешный, клиент перенаправляет браузер на мою страницу application.html.
б. Если сообщение об ошибке не появилось, появится сообщение и останется на странице login.html.
пока он выглядит хорошо и очень прямолинейно.
Мое предложение - использовать токены JWT с библиотекой Satellizer, что упрощает вашу работу. После того, как пользователь выполнил вход в систему и вы выпустили ему токен JWT, он должен передать этот токен в каждом HTTP-запросе (Satellizer автоматически вводит его после успешного входа в систему). Вам необходимо проверить его и разрешить/ограничить действие пользователя соответствующим образом. Существует несколько библиотек Java, которые упрощают работу с токенами JWT на стороне сервера. Я использовал в нескольких своих проектах jose4j library, и у меня есть положительный опыт.
У Satellizer и jose4j есть хорошие примеры на их вики, как их использовать.