Browse Source

Avoid blocking in InMemoryWebSessionStore#changeSessionId

Closes gh-29212
pull/29969/head
rstoyanchev 3 years ago
parent
commit
b23316302d
  1. 19
      spring-web/src/main/java/org/springframework/web/server/session/InMemoryWebSessionStore.java

19
spring-web/src/main/java/org/springframework/web/server/session/InMemoryWebSessionStore.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2002-2021 the original author or authors.
* Copyright 2002-2023 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -229,12 +229,17 @@ public class InMemoryWebSessionStore implements WebSessionStore { @@ -229,12 +229,17 @@ public class InMemoryWebSessionStore implements WebSessionStore {
@Override
public Mono<Void> changeSessionId() {
String currentId = this.id.get();
InMemoryWebSessionStore.this.sessions.remove(currentId);
String newId = String.valueOf(idGenerator.generateId());
this.id.set(newId);
InMemoryWebSessionStore.this.sessions.put(this.getId(), this);
return Mono.empty();
return Mono.<Void>defer(() -> {
String currentId = this.id.get();
InMemoryWebSessionStore.this.sessions.remove(currentId);
String newId = String.valueOf(idGenerator.generateId());
this.id.set(newId);
InMemoryWebSessionStore.this.sessions.put(this.getId(), this);
return Mono.empty();
})
.subscribeOn(Schedulers.boundedElastic())
.publishOn(Schedulers.parallel())
.then();
}
@Override

Loading…
Cancel
Save