Как узнать причину сбоя входа в систему в клиентах при использовании подключаемого модуля Grails Spring Security Rest?

Мы используем подключаемый модуль Grails Spring Security Rest 1.5.2 с Grails 2.5.2.

К сожалению, похоже, он не сообщает о какой-либо причине, по которой произошел сбой входа в систему. Единственное, что мы получаем из запроса на вход, это HTTP 401.

У нас есть механизм, в котором после нескольких неудачных попыток входа в систему мы устанавливаем свойство accountLocked для User, поэтому учетная запись становится отключенной/заблокированной.

Мы хотели бы получить хотя бы ответ JSON о том, почему не удалось войти в систему, например «Учетная запись пользователя заблокирована», «Неверные учетные данные», «Нет такого пользователя» и т. д.

Есть ли способ сделать это с текущими версиями, которые мы используем?


person Ertan D.    schedule 13.11.2015    source источник


Ответы (1)


Плагин не поддерживает это из коробки. Однако эту проблему можно легко обойти, заменив RestAuthenticationFailureHandler с вашей собственной реализацией и подключением его в resources.groovy как restAuthenticationFailureHandler.

person Álvaro Sánchez-Mariscal    schedule 13.11.2015
comment
Спасибо за ответ. Таким образом, в исключении есть сведения об ошибке, и мне нужно будет добавить свое сообщение JSON в объект ответа в пользовательском RestAuthenticationFailureHandler. Верно? - person Ertan D.; 13.11.2015
comment
Это может быть любой org.springframework.security.core.AuthenticationException, например, org.springframework.security.authentication.LockedException. - person Álvaro Sánchez-Mariscal; 13.11.2015
comment
Я делаю это. Это работает, но я не могу добавить какое-либо тело в ответ... Когда я добавляю заголовок, он работает нормально, но я никогда ничего не получаю в response.body, когда пытаюсь ответить.getWriter().write({\error\ : ${e .сообщение}); в моем пользовательском restAuthenticationFailureHandler Любая идея? - person Bourdier Jonathan; 28.02.2018
comment
Отсюда трудно сказать. Вы также установили заголовок Content-Type ответа? В противном случае некоторые клиенты не смогут прочитать тело - person Álvaro Sánchez-Mariscal; 01.03.2018