首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Grails spring安全rest - overwrite令牌

Grails spring安全rest - overwrite令牌
EN

Stack Overflow用户
提问于 2015-02-23 19:28:26
回答 3查看 707关注 0票数 1

我在覆盖数据库中已有令牌的用户的令牌时遇到问题。问题:对api/v1/login的POST请求在JSON-response中生成新的令牌,但是我收到的新生成的令牌没有存储在数据库中如果我们已经有了该用户的令牌,那么旧的令牌将一直保留,直到Quartz作业将其删除。

如果用户再次登录,我希望用户收到一个新的令牌(并存储它)。

EN

回答 3

Stack Overflow用户

发布于 2015-02-24 10:21:40

我们需要更多的细节来帮助你:你的插件配置,安全过滤器等。

我建议您将令牌保存在缓存中,而不是像documentation指定的那样保存在数据库中。

票数 0
EN

Stack Overflow用户

发布于 2015-02-24 17:56:44

很好的建议,如果GORM实现看起来不可能,我会尝试一下。也许它只是一个配置参数?我搜索了文档,但没有找到任何东西。

Config.groovy:

代码语言:javascript
运行
复制
grails.plugin.springsecurity.filterChain.chainMap = [
'/api/v1/**': 'JOINED_FILTERS,-exceptionTranslationFilter,-authenticationProcessingFilter,-securityContextPersistenceFilter',
grails.plugin.springsecurity.rest.token.validation.useBearerToken = false
grails.plugin.springsecurity.rest.token.validation.headerName = 'X-Auth-Token'
grails.plugin.springsecurity.rest.login.endpointUrl = '/api/v1/login'
grails.plugin.springsecurity.rest.token.storage.useGorm = true
grails.plugin.springsecurity.rest.token.storage.gorm.tokenDomainClassName = 'backend.auth.AuthenticationToken'
grails.plugin.springsecurity.rest.token.storage.gorm.tokenValuePropertyName = 'token'
grails.plugin.springsecurity.rest.token.storage.gorm.usernamePropertyName = 'username'
grails.plugin.springsecurity.rest.login.passwordPropertyName = 'password'
grails.plugin.springsecurity.rest.login.useJsonCredentials = true
grails.plugin.springsecurity.rest.login.useRequestParamsCredentials = false
票数 0
EN

Stack Overflow用户

发布于 2015-08-04 03:03:34

您的AuthenticationToken上可能有一个限制,使新令牌无法保存到数据库中。

执行另一次登录不会替换现有令牌,但会尝试将新条目添加到AuthenticationToken表中。

如果您在username上有一个唯一的约束,或者在您的令牌类中添加了一些其他非null属性,但该属性没有被填充,那么对save的调用将会失败,并且不会记录任何警告。

您可以在GormTokenStorageService.groovy上的第65行看到这一点。

代码语言:javascript
运行
复制
void storeToken(String tokenValue, UserDetails principal) {   
<snip>
    dc.withTransaction { status ->
            def newTokenObject = dc.newInstance((tokenValuePropertyName): tokenValue, (usernamePropertyName): principal.username)
            newTokenObject.save()
        }

不会检查令牌是否已成功保存。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28672728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档