AngularJs и технология Java Servlet

Я пытаюсь интегрировать очень старое веб-приложение Java и интерфейс AngularJs. Я не могу использовать структуру Spring и в основном должен кодировать части вручную. Вот мои конкретные вопросы:

  1. Я отправляю форму входа в сервлет для аутентификации, сервлет отвечает объектом разрешения и Jsessionid. Как мне избежать повторного входа в систему, когда я ухожу и возвращаюсь на страницу? Нужен ли мне еще один файл cookie для хранения имени пользователя/пароля?

  2. Как обеспечить защиту от CSRF с помощью этой архитектуры?

Пример был бы очень высоко оценен.


person JavaHead    schedule 04.01.2016    source источник


Ответы (2)


Я предлагаю использовать токены JWT с Satellizer, которая упрощает вашу работу. После того, как пользователь вошел в систему и вы выдали ему JWT-токен, он должен возвращать этот токен при каждом HTTP-запросе (Satellizer вводит его автоматически после успешного входа в систему). Вам необходимо подтвердить его и соответственно разрешить/ограничить действия пользователя. Существует несколько библиотек Java, которые упрощают работу с токенами JWT на стороне сервера. Я использовал в нескольких своих проектах библиотеку jose4j и имею положительный опыт работы с ней. .

У Satellizer и jose4j есть хорошие примеры их использования в вики.

person Anatoly    schedule 04.01.2016
comment
Это очень хорошая зацепка, спасибо. Но на данный момент я ищу подход на основе файлов cookie вместо JWT. - person JavaHead; 05.01.2016

На самом деле я реализовал два решения, одно с использованием JWT, а другое с использованием традиционной реализации Java Servlet с использованием файла cookie Jsessionid. Пока я чувствую, что печенье чище, поэтому вот некоторые подробности:

  1. Login.html отправляет форму имени пользователя/пароля в сервлет. Сервлет проверяет учетные данные и в случае успеха запускает новый сеанс (в результате создается файл cookie jsessionid). Если аутентификация не удалась, возвращается HttpServletResponse.SC_UNAUTHORIZED.

    а. Если обратный вызов выполнен успешно, клиент перенаправляет браузер на мою страницу application.html.

    б. В случае неудачи запрашивает сообщение и остается на странице login.html.

  2. когда страница application.html загружается, она немедленно отправляет фиктивный запрос на получение сервлету входа, чтобы убедиться, что сеанс все еще действителен. Если да, он загружает остальную часть страницы, если нет, перенаправляет обратно на страницу входа.
  3. Веб-службы защищены таким же образом с помощью фильтра аутентификации, который проверяет идентификатор сеанса.

пока это выглядит хорошо и очень прямолинейно.

person JavaHead    schedule 07.01.2016