Grails Spring Security: перенаправление после успешного входа / неудачи - PullRequest
14 голосов
/ 06 августа 2011

Я использую версию 1.2 плагина Spring Security в приложении Grails.Я хочу, чтобы попытки входа в систему обрабатывались следующим образом:

Успех

  • , если вход в систему был вызван попыткой доступа к защищенной странице, отправьте их на эту страницу
  • если пользователь вошел в систему "напрямую", перенаправьте его обратно на домашнюю страницу

Сбой

  • Отправьте его на страницу входа в систему и попробуйте сноваФорма с указанием неверных данных для входа в систему (за исключением полей пароля).Эта страница входа «попробуйте еще раз» - это не та страница, которую они используют для входа в первый раз

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

Ответы [ 2 ]

20 голосов
/ 06 августа 2011

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

Когда вы нажимаете защищенную ссылку и не вошли в систему, SavedRequest сохраняется всеанс, чтобы отслеживать, где вы пытались пойти.После успешного входа в систему этот объект проверяется, и из него создается перенаправление.Если вы перейдете непосредственно на страницу входа, сохраненной информации не будет, поэтому она будет перенаправлена ​​в папку по умолчанию.По умолчанию это корень приложения ('/'), но его можно настроить, например,

grails.plugins.springsecurity.successHandler.defaultTargetUrl = '/home'

. Для повторного отображения ранее введенного имени пользователя используйте сеансовый ключ SPRING_SECURITY_LAST_USERNAME в auth.gsp.:

<input type='text' class='text_' name='j_username' id='username'
       value="${session['SPRING_SECURITY_LAST_USERNAME']}" />
4 голосов
/ 26 мая 2014

Что сработало для меня, так это добавление следующей строки в Config.groovy

grails.plugin.springsecurity.successHandler.defaultTargetUrl = 'controllerName/actionName'

. Изменяется только grails. плагин not grails. plugins (обратите внимание, нет «s» после «плагин»)

...