Browse Source

Avoid blocking in InMemoryWebSessionStore#changeSessionId

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

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

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

Loading…
Cancel
Save