2015-02-23 61 views
1

我有問題覆蓋已有令牌的用戶在數據庫中的標記。 問題:對api/v1/login的POST請求會在JSON響應中生成新的令牌,但如果我們已經爲該用戶擁有令牌,則接收到的新生成的令牌不會存儲在數據庫中,舊的令牌會一直保留到Quartz作業去掉它。Grails彈簧安全休息 - 覆蓋標記

如果用戶再次登錄,我希望用戶可以接收新的令牌(並將其存儲)。

回答

0

我們需要更多的細節來幫助你在這:你插件配置,安全過濾器等

我建議你保存令牌緩存而不是在像documentation指定數據庫。

0

很好的建議,如果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 
0

你可能對你的AuthenticationToken是防止新的令牌被保存在數據庫中的約束。

做另一次登錄不會取代現有的令牌,但會嘗試並向AuthenticationToken表中添加一個新條目。

如果您對用戶名或其他非空屬性添加到未填充的令牌類中,則保存調用將失敗,並且不會在任何地方記錄警告。

你可以看到這對GormTokenStorageService.groovy圍繞線65

void storeToken(String tokenValue, UserDetails principal) { 
<snip> 
    dc.withTransaction { status -> 
      def newTokenObject = dc.newInstance((tokenValuePropertyName): tokenValue, (usernamePropertyName): principal.username) 
      newTokenObject.save() 
     } 

沒有檢查是否令牌成功保存。