Grails Spring Безопасность: перенаправление после успешного входа/выхода из системы

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

Успех

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

Отказ

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

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

Ответ 1

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

Когда вы нажимаете защищенную ссылку и не регистрируетесь, в сеансе хранится 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']}" />

Ответ 2

Для меня работала следующая строка в Config.groovy

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

Вещь, которая изменилась, - это grails. плагин не grails. плагины (обратите внимание на отсутствие 'после' плагина ')