我有問題覆蓋已有令牌的用戶在數據庫中的標記。 問題:對api/v1/login的POST請求會在JSON響應中生成新的令牌,但如果我們已經爲該用戶擁有令牌,則接收到的新生成的令牌不會存儲在數據庫中,舊的令牌會一直保留到Quartz作業去掉它。Grails彈簧安全休息 - 覆蓋標記
如果用戶再次登錄,我希望用戶可以接收新的令牌(並將其存儲)。
我有問題覆蓋已有令牌的用戶在數據庫中的標記。 問題:對api/v1/login的POST請求會在JSON響應中生成新的令牌,但如果我們已經爲該用戶擁有令牌,則接收到的新生成的令牌不會存儲在數據庫中,舊的令牌會一直保留到Quartz作業去掉它。Grails彈簧安全休息 - 覆蓋標記
如果用戶再次登錄,我希望用戶可以接收新的令牌(並將其存儲)。
我們需要更多的細節來幫助你在這:你插件配置,安全過濾器等
我建議你保存令牌緩存而不是在像documentation指定數據庫。
很好的建議,如果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
你可能對你的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()
}
沒有檢查是否令牌成功保存。