Я пытаюсь настроить приложение Grails в сценарий с предварительной аутентификацией с использованием Spring Security Core.
Поэтому я написал собственный фильтр аутентификации:
class MyAuthenticationFilter extends AbstractPreAuthenticatedProcessingFilter {
protected getPreAuthenticatedPrincipal(request) { "my_username" }
protected getPreAuthenticatedCredentials(request) { "N/A" }
}
добавил его в Spring:
beans = {
myAuthenticationFilter(MyAuthenticationFilter) {
authenticationManager = ref('authenticationManager')
checkForPrincipalChanges = true
}
}
и зарегистрировал его в BootStrap с позицией PRE_AUTH_FILTER:
class BootStrap {
def init = { servletContext ->
SpringSecurityUtils.clientRegisterFilter('myAuthenticationFilter',
SecurityFilterPosition.PRE_AUTH_FILTER.order)
}
}
Config.groovy содержит только стандартные имена классов User, Role и UserRole, а также некоторые статические правила.
Внутри фильтра я пытался вернуть всевозможные вещи из его метода getPreAuthenticatedPrincipal()
: идентификатор пользователя, идентификатор пользователя в виде строки, его имя пользователя, сам объект пользователя… Я вижу, что мой фильтр вызывается для каждого запроса (который что я хочу, установив checkForPrincipalChanges = true
) что бы я из него ни возвращал, текущий пользователь остается анонимным: springSecurityService.principal
все равно __grails.anonymous.user__
Что мне нужно изменить в моей настройке, чтобы иметь возможность аутентифицировать моих пользователей с их существующими группами и ролями? Я не хочу писать дополнительный провайдер аутентификации, меня устраивает стандартный daoAuthenticationProvider
Grails. Нужно ли мне возвращать что-то конкретное из моего фильтра? Нужно ли мне настраивать другие классы Spring?