Grails Ajax Войти - PullRequest
       12

Grails Ajax Войти

3 голосов
/ 24 июля 2011

Я хочу использовать функцию входа в AJAX плагина безопасности Spring.

Я застрял, получив ответ JSON об успехе от loginController в мой клиент GWT.

Как яиз документации понятно, что мне нужно опубликовать свои параметры в url / j_spring_security_check, а Spring Security перенаправляет меня на правильное действие.

Если я загляну в свой LoginController, я не вижу ничего о действительной логике входа в систему и ее немногомагия для меня, где все вещи входа / базы данных сделано.Дальнейшая весенняя защита всегда перенаправляет к действию auth вместо использования AjaxAuth, даже если я добавляю заголовок «X-Requested-With» для публикации.Если я делаю свое сообщение на url / login / ajaxAuth, я получаю 401, который в порядке, потому что он записан в контроллере (даже если я не знаю, почему мы должны возвращать 401 здесь).Может быть, я делаю что-то совершенно не так: -)

Мои основные вопросы:

  • Где я могу найти логику входа в систему?
  • Какой параметр мне нужен?предоставить?
  • Какой URL-адрес мне нужно использовать?
  • Что мне делать, если я не хочу использовать имя пользователя, а вместо этого и поле электронной почты?

Спасибо за вашу помощь!

Ответы [ 2 ]

2 голосов
/ 11 июля 2013

Я использую Grails 2.1.1 и столкнулся с той же проблемой.Перепробовал все вышеперечисленное, но все равно не смог получить мой логин AJAX для вызова метода ajaxSuccess.Однако, когда это терпело неудачу, это вызывало authFail?ajax=true.

После поиска больше, вот что я сделал:

  1. Добавил grails.plugins.springsecurity.successHandler.targetUrlParameter = 'ajaxUrl' в мой Config.groovy
  2. Добавлен <input type="hidden" name="ajaxUrl" value="/login/ajaxSuccess" /> в мою форму входа в AJAX

Не уверен, почему это исправлено, но мне показалось, что это работает.

Просто опубликуйте это решение для пользователей, которые застряли и пришли на этот билет для решения.

2 голосов
/ 24 июля 2011

Похоже, вы правильно это реализовали, может быть, есть небольшая ошибка, например, опечатка.

Кстати:

  1. Это реализовано в фильтре , который обрабатывает ваш запрос перед фактическими контроллерами. В вашем случае это будет UsernamePasswordAuthenticationFilter (или RequestHolderAuthenticationFilter). Контроллер используется там только для визуализации дополнительных данных. Что касается аутентификации ajax, он использует /login/ajaxSuccess, который отображает JSON ответ

  2. По умолчанию используется j_username & j_password. И вы можете использовать ajax=true параметр вместо X-Request-With header

  3. /j_spring_security_check по умолчанию

  4. Вы можете реализовать свой собственный GrailsUserDetailsService (или расширить GormUserDetailsService) и настроить его как пружинный компонент , с именем userDetailsService, в resources.xml

Вы также можете включить ведение журнала для Spring Security:

log4j {
   debug 'org.codehaus.groovy.grails.plugins.springsecurity',
         'org.springframework.security'
}

может быть, это будет полезно

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