Интеграция GWT 2.0 с Spring Security 3.0

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

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

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

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

В моем приложении 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.

Ответ 1

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

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

Ответ 2

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

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

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

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

  • И, наконец, помимо безопасности spring, вы можете защитить себя от XSS и CSRF. Дополнительную информацию см. В Безопасность для приложений GWT.

Ответ 3

Взгляните на мое сообщение в блоге http://technowobble.blogspot.com/2010/05/gwt-and-spring-security.html для примера приложения, которое интегрирует GWT и Spring Безопасность. Надеюсь, это даст вам некоторые идеи о том, как реализовать ваши конкретные потребности.

Ответ 4

Вы можете использовать защиту уровня страницы, так как ваш GWT-модуль может быть разделен двумя страницами, используя метод, описанный здесь rustyshelf: Проблема с несколькими точками входа в том же модуле.

Вкратце:

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

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

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

Ответ 5

Я только что закончил писать статью о том, как интегрировать GWT с безопасностью Spring, не имея необходимости использовать страницу JSP.

Вы можете проверить это здесь: http://crazygui.wordpress.com/2014/08/29/secure-rest-services-using-spring-security/ Я также опубликовал рабочий пример GitHub.