Хранение истории GWT хеши через Spring Security Войти - PullRequest
2 голосов
/ 22 января 2012

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

Функции поддержки истории GWT путем передачи хеш-тегов (т.е. index.html#token). Ограничения безопасности требуют, чтобы пользователи вошли в систему до того, как они действительно смогут получить доступ к index.html, поэтому они отправляются на страницу входа с сохранением токена (login.html#token). Все идет нормально. Теперь пользователь проходит проверку подлинности, и Spring отправляет его на index.html (цель по умолчанию) и удаляет часть URL #token.

Как заставить Spring Security поддерживать токен и отправить моего недавно аутентифицированного пользователя на страницу, которую он запрашивал (index.html#token)? Поскольку у меня уже работает аутентификация Spring Security, я предпочел бы не реструктурировать способ, которым мое приложение обрабатывает входы в систему.

Ответы [ 3 ]

4 голосов
/ 14 ноября 2012

После долгих поисков я нашел ответ на Spring's Jira .Как заявил Колин Алворт, этот токен на самом деле не является частью запроса, поэтому Spring Security никогда не видит его на стороне сервера и, следовательно, не может использовать его для определения окончательного URL-адреса.Таким образом, подход, который я использовал, заключался в добавлении хэша (на стороне клиента) к j_spring_security_check, делая его j_spring_security_check#token.Теперь токен проходит отлично, что позволяет мне иметь хорошо защищенное приложение с рабочими токенами.

Спасибо за вашу помощь, Колин, твой ответ заставил меня задуматься в правильном направлении.

3 голосов
/ 22 января 2012

Сервер не видит этот токен как часть запроса GET / POST, как вы заметили, он виден только браузером.Лучшее исправление, которое я видел для этого в прошлом, - чтобы страница входа в систему записывала текущее значение window.location.hash и передавала его вместе с формой входа в систему (при условии, что будет выполнено перенаправление, сохраняющее хэш) или на сервер в качестве параметра входа в систему, чтобы он мог правильно перенаправить.

0 голосов
/ 22 января 2012

Вот что происходит, это может помочь вам решить проблему:

  1. отправка неаутентифицированных пользователей из index.html в login.html, скорее всего, реализована как перенаправление HTTP 3xx, и поэтому браузерсохраняет хеш-фрагмент (#token).
  2. После входа в систему Spring отправляет их из файла login.html в index.html не через редирект 3xx, поэтому браузер не сохраняет токен.

Одним из решений было бы вставить токен в index.html и собрать его с помощью GWT.Другой способ - сделать login.html -> index.html перенаправлением 3xx (если это позволяет весна).

...