我正在使用带有spring-security-rest,spring-security-core和spring-security-ui插件的Grails v2.4.2。
我正在尝试禁用spring-security-rest附带的RestAuthenticationFilter,这样我就可以编写一个不区分大小写的自定义身份验证过滤器。
在我的config.groovy中,我使用以下过滤器链图:
grails.plugin.springsecurity.filterChain.chainMap = [
'/**': 'JOINED_FILTERS,-exceptionTranslationFilter,-authenticationProcessingFilter,-securityContextPersistenceFilter,-rememberMeAuthenticationFilter,-restAuthenticationFilter'
我添加了' - restAuthenticationFilter '来排除RestAuthenticationFilter,但它仍在运行。
如何排除RestAuthentication过滤器,或者通过RestAuthenticationFilter登录时是否有更简单的方法为用户名添加不区分大小写?
答案 0 :(得分:2)
似乎有两个不同的问题。
如果要排除REST身份验证过滤器,我认为您需要从链中删除restTokenValidationFilter和restExceptionTranslationFilter。
尝试
grails.plugin.springsecurity.filterChain.chainMap = [
'/**': 'JOINED_FILTERS,-exceptionTranslationFilter,-authenticationProcessingFilter,-securityContextPersistenceFilter,-rememberMeAuthenticationFilter,-restTokenValidationFilter,-restExceptionTranslationFilter'
]
如果您想使用户名不区分大小写,只需创建GrailsUserDetailsService的自定义实现。实现loadUserByUsername以忽略用户名的大小写。
请参阅http://grails-plugins.github.io/grails-spring-security-core/guide/userDetailsService.html
答案 1 :(得分:1)
插件本身不执行任何身份验证,而是将其委派给Spring的AuthenticationManager
,后者又使用配置的任何身份验证提供程序。在您的情况下,使用的提供程序是DaoAuthenticationProvider
,它将用户检索委托给userDetailsService
配置的bean。
正如@jstell所指出的,核心插件提供了一个GormUserDetailsService
,你必须子类化,覆盖方法loadUserByUsername(String username, boolean loadRoles)
,并在resources.groovy
中配置为userDetailsService
bean