Как получить URL-адреса при неудачной попытке входа - PullRequest
2 голосов
/ 30 марта 2012

У меня есть логин на сайте Grails (Grails 2.0 с Spring Security 1.2.6), который должен перенаправлять в зависимости от того, какие параметры передаются через URL.

Например, если вы перешли на '/'Вы перейдете к стандартному 'login/auth', но если вы перейдете к '/?org=abccorp', вы будете перенаправлены на 'landing/index'.После успешного входа вы попадете в разные части сайта на основе параметров, переданных через URL-адрес и роль безопасности.

До сих пор мне удавалось заставить все работать в обычном сценарии, гдекто-то успешно входит в систему.Моя проблема возникает из-за того, что кто-то не может войти в систему, Spring Security перенаправляет на действие по умолчанию 'login/authfail' без возможности найти исходный URL или параметры.

Возможно, есть способ получить эти вещи, но все, что яfound либо устарел, либо перемещен, либо просто отсутствует.

Есть ли способ получить данные, в которые изначально были переданы параметры?Могу ли я сохранить их где-то между вызовами или что-то в этом роде?

1 Ответ

2 голосов
/ 30 марта 2012

Компонент authenticationFailureHandler использует экземпляр org.springframework.security.web.RedirectStrategy для перенаправления при сбое входа в систему. По умолчанию это экземпляр org.springframework.security.web.DefaultRedirectStrategy и зарегистрирован как компонент redirectStrategy. Таким образом, вы можете заменить компонент redirectStrategy для компонента authenticationFailureHandler своим собственным. Не похоже, что было бы целесообразно заменять весь компонент redirectStrategy, поскольку у вас нет доступа к Authentication, поэтому вы не знаете, было ли это перенаправлением сбоя или успеха.

Чтобы избежать переопределения всего компонента authenticationFailureHandler, я бы просто изменил компонент в BootStrap.groovy. Это было бы что-то вроде этого (я не проверял это, так что это может быть немного не так)

import com.foo.bar.MyRedirectStrategy

class BootStrap {

   def authenticationFailureHandler

   def init = { servletContext ->
      authenticationFailureHandler.redirectStrategy = new MyRedirectStrategy()
   }
}

где MyRedirectStrategy - это собственный подкласс DefaultRedirectStrategy (в src / groovy или src / java), который использует URL-адрес запроса для определения URL-адреса перенаправления.

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