首页 > 解决方案 > Grails Spring 安全认证提供者和自定义过滤器

问题描述

我是 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并具有注入。我的提供者实现AuthenticationManagerAuthenticationEntryPointAuthenticationProvider

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

我也不明白为什么我的自定义过滤器会启动,即使我从过滤器列表中删除它也是如此。似乎只需在resources.groovy文件中定义它就足以启动它。

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

谢谢

标签: javaspringgrailsgroovyspring-security

解决方案


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

authenticationProcessingFilter(MyCustomFilter) {
    ...args
}

我的供应商在获得供应商方面的建设问题并不重要。原来弹簧安全核心在那之后才改变它。


推荐阅读