Grails Spring安全身份验证提供程序和自定义过滤器

时间:2018-07-01 02:43:01

标签: java spring grails groovy spring-security

我是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)

我的过滤器和提供程序都是jar所提供的Java类。过滤器扩展了OncePerRequestFilter,并注入了AuthenticationManagerAuthenticationEntryPoint。我的提供商实施了AuthenticationProvider

问题是,当我在过滤器中放置调试点以查看AuthenticationManager并查看其中的`AuthenticationProviders时,我根本看不到自定义提供程序。我仍然看到默认的spring-security-core插件提供程序。

即使将我从过滤器列表中删除,我也不理解为什么启动自定义过滤器。似乎只需在resources.groovy文件中定义它就可以启动它。

刚刚意识到它被启动的原因是因为在启动时它被添加到了弹簧容器中。

谢谢

1 个答案:

答案 0 :(得分:0)

弄清楚了。我最终没有定义filterNames,在我的resources.groovy文件中,我得到了这个:

authenticationProcessingFilter(MyCustomFilter) {
    ...args
}

与我的提供程序有关的问题是,获取提供程序的构造无关紧要。事实证明,Spring安全核心直到那之后才对其进行更改。