我在覆盖数据库中已有令牌的用户的令牌时遇到问题。问题:对api/v1/login的POST请求在JSON-response中生成新的令牌,但是我收到的新生成的令牌没有存储在数据库中如果我们已经有了该用户的令牌,那么旧的令牌将一直保留,直到Quartz作业将其删除。
如果用户再次登录,我希望用户收到一个新的令牌(并存储它)。
发布于 2015-02-24 10:21:40
我们需要更多的细节来帮助你:你的插件配置,安全过滤器等。
我建议您将令牌保存在缓存中,而不是像documentation指定的那样保存在数据库中。
发布于 2015-02-24 17:56:44
很好的建议,如果GORM实现看起来不可能,我会尝试一下。也许它只是一个配置参数?我搜索了文档,但没有找到任何东西。
Config.groovy:
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
发布于 2015-08-04 03:03:34
您的AuthenticationToken上可能有一个限制,使新令牌无法保存到数据库中。
执行另一次登录不会替换现有令牌,但会尝试将新条目添加到AuthenticationToken表中。
如果您在username上有一个唯一的约束,或者在您的令牌类中添加了一些其他非null属性,但该属性没有被填充,那么对save的调用将会失败,并且不会记录任何警告。
您可以在GormTokenStorageService.groovy上的第65行看到这一点。
void storeToken(String tokenValue, UserDetails principal) {
<snip>
dc.withTransaction { status ->
def newTokenObject = dc.newInstance((tokenValuePropertyName): tokenValue, (usernamePropertyName): principal.username)
newTokenObject.save()
}
不会检查令牌是否已成功保存。
https://stackoverflow.com/questions/28672728
复制相似问题