Comments (3)
Hi @Lucasark.
The maxInactiveInterval
is used if the interval
attribute is not present in the Mongo Document
when converting it to a MongoSession
. I don't quite understand what is the problem here. Would you mind providing more details on where the problem is or what would be the expected behavior?
from spring-session.
@marcusdacoregio If I just write this:
@EnableMongoHttpSession
@Configuration(proxyBeanMethods = false)
public class SessionConfig {
@Bean
public JdkMongoSessionConverter jdkMongoSessionConverter() {
return new JdkMongoSessionConverter(Duration.ofMinutes(1));
}
}
JdkMongoSessionConverter parameter is same of nothing, is not used. I need explicit in EnableMongoHttpSession, even the JdkMongoSessionConverter require 1 parameter
from spring-session.
I recognized the same behavior with the ReactiveMongoSessionRepository and I think the problem is that the MongoSession will be created with a constructor without interval, and AFTERWARDS the maxInactiveInterval will be set. But the constructor already called the setLastAccessedTime
method, which will recalculate the expireAt with MapSession.DEFAULT_MAX_INACTIVE_INTERVAL (30m).
To keep it short, every session will have a expireAt date of creationDate + 30m after construction. Setting the maxInteractiveInterval will only have an effect on later setLastAccessedTime
calls.
A simple solution would be to use directly the constructor with sessionIdGenerator and maxInactiveInterval instead of calling the constructor without maxInactiveInterval and calling all the setters afterwards.
Code in the ReactiveMongoSessionRepository:
@Override
public Mono<MongoSession> createSession() {
// @formatter:off
return Mono.fromSupplier(() -> this.sessionIdGenerator.generate())
.map(MongoSession::new)
.doOnNext((mongoSession) -> mongoSession.setMaxInactiveInterval(this.defaultMaxInactiveInterval))
.doOnNext(
(mongoSession) -> mongoSession.setSessionIdGenerator(this.sessionIdGenerator))
.doOnNext((mongoSession) -> publishEvent(new SessionCreatedEvent(this, mongoSession)))
.switchIfEmpty(Mono.just(new MongoSession(this.sessionIdGenerator)))
.subscribeOn(Schedulers.boundedElastic())
.publishOn(Schedulers.parallel());
// @formatter:on
}
Constructor:
MongoSession(String id, long maxInactiveIntervalInSeconds) {
this.id = id;
this.originalSessionId = id;
this.intervalSeconds = maxInactiveIntervalInSeconds;
setLastAccessedTime(Instant.ofEpochMilli(this.createdMillis));
}
from spring-session.
Related Issues (20)
- Fix failing tests HOT 1
- Update to Spring Security 6.3.0-M3
- An "IllegalStateException: Session was invalidated" - exception is thrown after session was already invalidated
- spring security + form login + redis session storage -> keep coming out anonymous User HOT 3
- Consider Sorted Set Expiration Policy in RedisIndexedHttpSession HOT 1
- Upgrade to Spring Data Bom 2024.0.0-RC1
- Upgrade to MongoDB 5.0.1
- Possibility to apply the `SessionRepositoryFilter` conditionally. HOT 2
- Update to Spring Security 6.3.0-RC1
- Support for NATS JetStream Key/Value store as an alternative for Redis HOT 2
- Spring Session JDBC JSON format storing is not working HOT 9
- Migrate to com.gradle.develocity plugin
- Migrate to com.gradle.develocity plugin
- Migrate to com.gradle.develocity plugin
- Update reference site link HOT 1
- Update to Spring Security 6.3.0
- Spring Session Redis Index Key not deleted when session expired
- Does spring-session support spring-authorization-server? HOT 1
- Migration of active sessions from one datasource to another HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from spring-session.