@@ -229,18 +229,12 @@ public Set<OAuth2AccessTokenEntity> getAccessTokensForResourceSet(ResourceSet rs
229
229
@ Override
230
230
@ Transactional (value ="defaultTransactionManager" )
231
231
public void clearDuplicateAccessTokens () {
232
- /*
233
- *
234
- * delete from access_token where token_value in
235
- * (select token_value from (select token_value, count(*) as count from
236
- * access_token group by token_value having count > 1) duplicate_tokens)
237
- */
238
232
239
233
Query query = manager .createQuery ("select a.jwt, count(1) as c from OAuth2AccessTokenEntity a GROUP BY a.jwt HAVING c > 1" );
240
234
List <Object []> resultList = query .getResultList ();
241
235
List <JWT > values = new ArrayList <>();
242
236
for (Object [] r : resultList ) {
243
- logger .warn ("Found duplicate: {}, {}" , r [0 ], r [1 ]);
237
+ logger .warn ("Found duplicate access tokens : {}, {}" , (( JWT ) r [0 ]). serialize () , r [1 ]);
244
238
values .add ((JWT ) r [0 ]);
245
239
}
246
240
if (values .size () > 0 ) {
@@ -249,7 +243,7 @@ public void clearDuplicateAccessTokens() {
249
243
Root <OAuth2AccessTokenEntity > root = criteriaDelete .from (OAuth2AccessTokenEntity .class );
250
244
criteriaDelete .where (root .get ("jwt" ).in (values ));
251
245
int result = manager .createQuery (criteriaDelete ).executeUpdate ();
252
- logger .warn ("Results from delete: {} " , result );
246
+ logger .warn ("Deleted {} duplicate access tokens " , result );
253
247
}
254
248
}
255
249
@@ -258,6 +252,21 @@ public void clearDuplicateAccessTokens() {
258
252
*/
259
253
@ Override
260
254
public void clearDuplicateRefreshTokens () {
255
+ Query query = manager .createQuery ("select a.jwt, count(1) as c from OAuth2RefreshTokenEntity a GROUP BY a.jwt HAVING c > 1" );
256
+ List <Object []> resultList = query .getResultList ();
257
+ List <JWT > values = new ArrayList <>();
258
+ for (Object [] r : resultList ) {
259
+ logger .warn ("Found duplicate refresh tokens: {}, {}" , ((JWT )r [0 ]).serialize (), r [1 ]);
260
+ values .add ((JWT ) r [0 ]);
261
+ }
262
+ if (values .size () > 0 ) {
263
+ CriteriaBuilder cb = manager .getCriteriaBuilder ();
264
+ CriteriaDelete <OAuth2RefreshTokenEntity > criteriaDelete = cb .createCriteriaDelete (OAuth2RefreshTokenEntity .class );
265
+ Root <OAuth2RefreshTokenEntity > root = criteriaDelete .from (OAuth2RefreshTokenEntity .class );
266
+ criteriaDelete .where (root .get ("jwt" ).in (values ));
267
+ int result = manager .createQuery (criteriaDelete ).executeUpdate ();
268
+ logger .warn ("Deleted {} duplicate refresh tokens" , result );
269
+ }
261
270
262
271
}
263
272
0 commit comments