Поставщик аутентификации Grails Spring и пользовательский фильтр - PullRequest
0 голосов
/ 01 июля 2018

Я новичок в языке Grails и использую Grails 2.5.6 с подключаемым модулем spring-security-core 2.0.0.

Я определил своего провайдера в файле config.groovy:

grails.plugin.springsecurity.providerNames = [
    'myCustomAuthenticationProvider',
    'anonymousAuthenticationProvider',
    'rememberMeAuthenticationProvider'
]

и мой фильтр как:

grails.plugin.springsecurity.filterChain.filterNames = [
    'securityContextPersistenceFilter',
    'myCustomFilter',
    'exceptionTranslationFilter', 
    'anonymousAuthenticationFilter',
    'filterInvocationInterceptor'
]

Мой resources.groovy файл:

myCustomAuthenticationProvider(MyCustomAuthenticationProvider)
myCustomFilter(myCustomFilter)

И мой фильтр, и провайдер являются классами java, предоставленными jar. Фильтр расширяет OncePerRequestFilter и содержит AuthenticationManager и AuthenticationEntryPoint. Мой провайдер реализует AuthenticationProvider

Проблема в том, что когда я помещаю точку отладки в свой фильтр, чтобы увидеть AuthenticationManager и вижу `AuthenticationProviders, которые есть в его списке, я вообще не вижу своего собственного провайдера. Я по-прежнему вижу стандартные плагины-провайдеры ядра безопасности.

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

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

Спасибо

1 Ответ

0 голосов
/ 01 июля 2018

Разобрался. В итоге я не определил filterNames, и в моем файле resources.groovy есть следующее:

authenticationProcessingFilter(MyCustomFilter) {
    ...args
}

И проблема с моим провайдером по строительству получения провайдеров не имеет значения. Оказывается, пружинное защитное ядро ​​не меняет его до тех пор, пока после этого.

...