我正在使用 spring security rest plugin让 Grails 为 AngularJS 应用程序提供登录机制。
登录工作正常,但我不知道如何拦截登录调用,以便存储有关(无效/有效)登录尝试的其他统计信息。
由于我对 Spring Security 很陌生,所以我不熟悉它的过滤器链。是否可以编写自定义过滤器来拦截登录调用而不干扰插件的操作模式,或者是否有更好的方法来实现我想要做的事情?
我看到 Spring Security Rest 插件有一个名为 RestAuthenticationSuccessHandler
的类它实现了 Spring Security 的 AuthenticationSuccessHandler
界面。
我可以提供插件使用的类的自定义实现吗?
我的配置:
grails.plugin.springsecurity.rememberMe.persistent = false
grails.plugin.springsecurity.rest.login.useJsonCredentials = true
grails.plugin.springsecurity.rest.login.failureStatusCode = 401
grails.plugin.springsecurity.rest.token.storage.useGorm = true
grails.plugin.springsecurity.rest.token.storage.gorm.tokenDomainClassName = 'example.auth.AuthenticationToken'
grails.plugin.springsecurity.rest.token.storage.gorm.tokenValuePropertyName = 'token'
grails.plugin.springsecurity.rest.token.storage.gorm.usernamePropertyName = 'username'
grails.plugin.springsecurity.filterChain.chainMap = [
'/auth/**': 'JOINED_FILTERS,-exceptionTranslationFilter,-authenticationProcessingFilter,-securityContextPersistenceFilter, -rememberMeAuthenticationFilter', // Stateless chain
'/api/**': 'JOINED_FILTERS,-exceptionTranslationFilter,-authenticationProcessingFilter,-securityContextPersistenceFilter', // Stateless chain
'/**': 'JOINED_FILTERS,-restTokenValidationFilter,-restExceptionTranslationFilter' // Traditional chain
]
grails.plugin.springsecurity.rest.login.active=true
grails.plugin.springsecurity.rest.login.useJsonCredentials=true
grails.plugin.springsecurity.rest.token.storage.useGorm=true
grails.plugin.springsecurity.rest.token.generation.useSecureRandom=true
grails.plugin.springsecurity.rest.token.validation.headerName='X-Auth-Token'
grails.plugin.springsecurity.rest.token.generation.useUUID=false
grails.plugin.springsecurity.rest.token.validation.active=true
grails.plugin.springsecurity.rest.token.validation.endpointUrl='/auth/validate'
最佳答案
是的,您可以提供一个自定义 bean 来实现 RestAuthenticationSuccessHandler
.看看API documentation让类(class)看到你需要实现什么。然后就像在应用程序上下文中覆盖 bean 一样简单:
// Resources.groovy
restAuthenticationSuccessHandler(MyCustomRestAuthenticationSuccessHandler) {
renderer = ref('accessTokenJsonRenderer')
}
查看 default implementation 也可能会有所帮助以你的为基础。
关于rest - 在 Grails 中使用 Spring-Security-Rest 插件拦截登录调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30878768/