Grails Spring Защитный плагин - форма входа в систему перенаправлена ​​на ajaxAuth

У меня есть приложение Grails, которое использует плагин grails spring security 2.0.RC-5. Скажем, у меня открыто 2 вкладки. 1-го, как только я вышел из приложения. Затем, во втором, я нажимаю кнопку, которая вызывает вызов AJAX для приложения.

Поскольку я вышел из системы, точкой входа будет LoginController.authAjax. Код по умолчанию, созданный плагином в этом методе, составляет

response.setHeader 'Location', SpringSecurityUtils.securityConfig.auth.ajaxLoginFormUrl
response.sendError HttpServletResponse.SC_UNAUTHORIZED

Я получаю 401 на мой вызов ajax, и все в порядке. Проблема заключается в том, что теперь, если я вернусь на страницу входа и повторно отправлю форму для входа, я перенаправляюсь к методу LoginController.authAjax.

Код в этом методе

render([success: true, username: springSecurityService.authentication.name] as JSON)

Это, в свою очередь, не перенаправляет меня на страницу панели инструментов в приложении, а выводит {"success":true,"username":"user1"}

Очевидно, что это не предполагаемое поведение. Как это исправить? Благодарю вас.

1 ответ

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

Если вы хотите окончательно отключить это поведение, вы можете указать следующую конфигурацию в своем Config.groovy:

grails.plugin.springsecurity.successHandler.alwaysUseDefault = true

Смотрите здесь http://grails-plugins.github.io/grails-spring-security-core/guide/urlProperties.html

Но если вы хотите отключить это условно, вы также можете сделать это, очистив эту переменную сеанса, как я упоминал выше:

В вашем действии authAjax:

def authAjax() {
 if (request.xhr) { // For any AJAX request or any condition you want
 session["SPRING_SECURITY_SAVED_REQUEST"] = null
 }
}

licensed under cc by-sa 3.0 with attribution.