2010-05-11 3 views
10

Я использовал GWT 2.0 с нескольких дней. Итак, я пытаюсь закодировать базовое приложение с формой входа и страницей, доступной только в том случае, если я зарегистрирован.Интеграция GWT 2.0 с Spring Security 3.0

Обычно в моем веб-приложении с помощью jsf я использую Spring Security 3.0 для настройки и защиты такого приложения. Итак, я решил попробовать сделать то же самое с моим приложением GWT 2.0.

Я хорошо настроил серверную часть Spring Security. Поэтому с моей страницы входа в GWT я могу ввести свой логин/пароль и выполнить проверку подлинности через Spring Security. Перенаправление на защищенную страницу завершено, и я могу подключить пользователя через вызов rpc к службе безопасности, которая использует SecurityContext Spring Security. Итак, я думаю, что эта часть в порядке.

Но у меня есть большая проблема для защиты URL-адресов. В самом деле, я хотел бы защитить страницу, чтобы ограничить доступ к определенной роли, как обычно, с Spring Security.

В моем приложении GWT я использую шаблон MVP с центральным контроллером приложения. Итак, у меня есть только одна страница, и для этой страницы я собираюсь разным взглядам при добавлении #name_of_view в конец URL-адреса. Например, чтобы получить доступ к моей странице входа в режиме разработки, я использую следующий URL-адрес в своем браузере:

http: // 127.0.0.1:8888/fr.myapp.Application/Application.html?gwt.codesvr= 127.0.0.1:9997#login

После того, как я правильно вошел, я собираюсь в следующем виде:

Http: // 127.0.0.1:8888/fr.myapp.Application/Application.html? gwt.codesvr = 127.0.0.1: 9997 # pagesecured

Из-за этого я не знаю, как настроить тэг http в Spring Security и как определить URL-адрес для перехвата, чтобы повлиять на их конкретные роли, чтобы ограничить доступ. Кроме того, я думаю, что проблема будет заключаться в использовании этого URL-адреса между режимом разработки и классическим режимом производства. Нет?

Итак, у кого-то есть идея помочь мне настроить и защитить мое приложение, используя эти URL-адреса? или с помощью другой техники для защиты приложения с регистрацией формы?

Спасибо заранее за вашу помощь.

Sylvain.

ответ

8

Вы не можете использовать безопасность на уровне страницы в этом сценарии, поскольку ваши представления изменяются на стороне клиента.

Единственный способ реализовать защиту на основе ролей в таком добросердечном приложении - использовать method-level security в своем серверном коде. Вы также можете ограничить доступ к вашему Application.html для пользователей, не прошедших аутентификацию, путем создания кодовой страницы входа в систему без ссылки на GWT (скажем, Login.html).

5

Согласен с @axtavt. В общем, вы не можете использовать безопасность уровня страницы с GWT, потому что это только одна страница с точки зрения безопасности весны.

Вы должны сделать следующее -

  1. Зафиксируйте вашу RPC URL. При необходимости вы можете использовать защиту уровня метода, как указывал axtavt. Чтобы подключить RPC с помощью Spring Security, переопределите метод onAfterRequestDeserialized(RPCRequest) в вашем сервлет RPC.Метод RPCRequest содержит сведения о вызываемом методе и фактических параметрах, которые передаются этому методу. Эта информация достаточна для того, чтобы один пользователь не мог обновлять записи другого пользователя.

  2. В случае ошибки аутентификации или авторизации в вашей службе RPC выведите соответствующие ошибки и отправьте их клиенту. В своем клиенте создайте centralized error handler и покажите соответствующее сообщение пользователю.

  3. И, наконец, в дополнение к весенней безопасности вы можете защитить себя от XSS и CSRF. За дополнительной информацией обращайтесь к Security for GWT Applications.

1

Вы можете использовать защиту уровня страницы, так как ваш GWT-модуль может использоваться двумя страницами, используя метод, описанный rustyshelf здесь: Problem with multiple entry Points in the same module.

В итоге:

  1. Создайте страницу, например, Login.html, который будет использовать только вход в токен, разрешить кому-либо доступ к нему и, например, он должен содержать тег div с идентификатором входа.
  2. Используйте Application.html с тегом div с приложением ID, которое будет для всего остального, и убедитесь, что оно не позволит использовать токен входа и запретить доступ к любым не прошедшим проверку подлинности пользователям.
  3. Загрузите ваш модуль GWT соответствующий вид в соответствии с тегом div, который находится на странице.

Разделители в каждом из HTML-файлов должны использоваться только для того, чтобы определить, какая страница HTML будет отображаться (в onModuleLoad), но div должен быть удален, так как остальная часть приложения не должна полагайтесь на присутствие div.

Вы должны также использовать method security для защиты ваших RPC, так как приведенное выше просто защитит URL-адрес, с которого работает большинство ваших приложений.

Смежные вопросы