Интеграция GWT 2.0 с Spring Security 3.0 - PullRequest
10 голосов
/ 11 мая 2010

Я использовал GWT 2.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.

Ответы [ 5 ]

8 голосов
/ 11 мая 2010

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

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

5 голосов
/ 11 мая 2010

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

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

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

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

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

2 голосов
/ 22 мая 2010

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

1 голос
/ 17 марта 2011

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

В итоге:

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

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

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

0 голосов
/ 29 августа 2014

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...