Безопасность в клиент-серверной архитектуре Java EE - PullRequest
2 голосов
/ 25 октября 2011

Я пытаюсь реализовать защиту для следующей архитектуры:

  • Веб-уровень: сервер приложений Tomcat 7, использующий GWT.
  • Серверная часть: сервер приложений JBoss 7.1, использующий EJB и JPA для сохранения данных. EJB-объекты используются удаленно веб-уровнем.

Я думаю об использовании защиты JBoss, которая включает в себя:

  • Создание домена безопасности в JBoss через login-config.xml
  • Домен безопасности использует DatabaseServerLoginModule для извлечения данных из базы данных MySQL с точки зрения имени пользователя / пароля и ролей.
  • Авторизация: безопасность на основе EJB путем аннотирования моих методов EJB с помощью @ RolesAllowed.

Я делал это раньше в одном JBoss и настраивал web.xml в Tomcat JBoss. Затем jboss-web.xml, чтобы привязать мое веб-приложение к домену безопасности, который я создал в JBoss.

Теперь меня интересует, как все это работает с использованием двух отдельных серверов: веб-контейнера Tomcat, который делает удаленные вызовы внутреннему JBoss. Мои вопросы:

  • Как я могу сообщить своему Tomcat о домене безопасности, определенном в удаленном JBoss (если вообще возможно), чтобы он делегировал JBoss задачу поиска учетных данных в БД?
  • Если мои компоненты GWT вызывают удаленные EJB, как я могу передать учетные данные безопасности от Tomcat на удаленный JBoss (принципал, пароль) таким образом, чтобы мне не приходилось указывать их в каждом вызове?
  • Это вообще возможно? Существуют ли другие альтернативы, которые могут облегчить мою жизнь в этом сценарии?

1 Ответ

2 голосов
/ 07 ноября 2011
  1. Не существует стандартного способа удаленного доступа к LoginModule.Поэтому, если вы хотите использовать модуль входа в систему вашего бэкенда в качестве модуля входа в систему JAAS в вашем внешнем интерфейсе, вам нужно будет выставить логику из вашего бэкенда, например, в качестве службы REST или WS, и создать собственный модуль входа в Tomcat для его удаленного вызова.

  2. Теоретически, контекст безопасности JAAS должен распространяться, если вы просматриваете свои внутренние EJB-компоненты через JNDI и выполняете над ним безопасные вызовы методов.На практике каждая AS обрабатывает это по-своему, и я никогда не видел, чтобы она работала между разными AS.

  3. Существует альтернатива, которая заключается в использовании Spring Security.См. Пакет org.springframework.security.remoting.httpinvoker и org.springframework.security.remoting.rmi .Но для этого необходимо полностью использовать Spring Remoting и Spring Security.

...