rest - 在 Grails 中使用 Spring-Security-Rest 插件拦截登录调用

标签 rest grails spring-security

我正在使用 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/

相关文章:

rest - 用于指定 CSV 分隔符和选项的 HTTP header

java - 用于检索数据 block 的 Web 服务

grails - Quartz的Quartz插件

java - 尽管以表单形式发送 CSRF token ,但不支持 Spring Security CSRF 405 方法 POST

java - Spring、@RolesAllowed 和数据库来保护页面

azure - 当 Azure REST API 用于 Blob 存储且查询字符串具有前缀或标记时,出现 403

php - 构建 REST API 代码 Igniter

email - 使用邮件插件在Grails中邮寄GSP

grails - 如何在 Config.groovy 中使用 Grails 中的 NodeBuilder 分配嵌套结构?

grails - 使 Controller 中的 Controller 进行身份验证