Получить имя пользователя при неудачном входе в Grails 2.5.5 с Spring Security

Мне нужно зафиксировать имя пользователя при неудачных попытках входа в систему, чтобы выполнить анализ для обнаружения атак и пользователей, у которых могут возникнуть проблемы с регистрацией в моем приложении.

На фильтре для всех контроллеров и действий я создаю журнал, используя класс домена ActivityLog, где хранятся все данные запроса/параметров для каждого запроса. Когда я пытаюсь получить имя пользователя для действий, исходящих от контроллера входа в систему, имя пользователя не указано ни в параметрах, ни в j_username.

Как я могу получить имя пользователя, использованное при неудачном входе в систему, из фильтра?

Параметры выглядят так: [login_error:1, action:auth, controller:login]

Я попытался получить информацию из GrailsAnonymousAuthenticationToken, но имя пользователя grails.anonymous.user


person Pablo Pazos    schedule 11.06.2017    source источник
comment
с помощью Spring Security и com.google.guava:guava вы действительно можете заставить его хранить кеш неудачных входов в систему и блокировать учетные записи нижнего уровня, когда он превышает пороговое значение - взгляните на этот демонстрационный проект, как безопасность guava, так и Spring, настроенная на Grails 3, но следует быть почти таким же основным github.com/vahidhedayati/grails-bean-validation-examples есть сервисы для LoginCache что-то.. которое биндится в гуаву   -  person V H    schedule 12.06.2017


Ответы (1)


Короткий ответ: вы не можете получить эту информацию в своем фильтре.

Длинный ответ состоит в том, чтобы использовать обработку событий, встроенную в подключаемый модуль ядра безопасности spring, чтобы Grails реагировал на неудачные события аутентификации.

Вот пример приложения Grails 2.4.x.

// Config.groovy
grails.plugin.springsecurity.apf.storeLastUsername = true // this is now needed with updated version of spring security
grails.plugin.springsecurity.useSecurityEventListener = true
grails.plugin.springsecurity.onInteractiveAuthenticationSuccessEvent = { e, appCtx ->
    // Successful login stuff in here

}
grails.plugin.springsecurity.onAbstractAuthenticationFailureEvent = { e, appCtx ->
  // Failed login stuff in here
  // e.getAuthentication().getPrincipal() contains the principal object
}
person Joshua Moore    schedule 12.06.2017
comment
попробую и вернусь :) - person Pablo Pazos; 12.06.2017