private boolean isExpired(Instant now) { if (this.state.get().equals(State.EXPIRED)) { return true; } if (checkExpired(now)) { this.state.set(State.EXPIRED); return true; } return false; }
@Override public Mono<Void> save() { checkMaxSessionsLimit(); // Implicitly started session.. if (!getAttributes().isEmpty()) { this.state.compareAndSet(State.NEW, State.STARTED); } if (isStarted()) { // Save InMemoryWebSessionStore.this.sessions.put(this.getId(), this); // Unless it was invalidated if (this.state.get().equals(State.EXPIRED)) { InMemoryWebSessionStore.this.sessions.remove(this.getId()); return Mono.error(new IllegalStateException("Session was invalidated")); } } return Mono.empty(); }
public void removeExpiredSessions(Instant now) { if (sessions.isEmpty()) { return; } if (this.lock.tryLock()) { try { Iterator<InMemoryWebSession> iterator = sessions.values().iterator(); while (iterator.hasNext()) { InMemoryWebSession session = iterator.next(); if (session.isExpired(now)) { iterator.remove(); session.invalidate(); } } } finally { this.checkTime = now.plus(CHECK_PERIOD, ChronoUnit.MILLIS); this.lock.unlock(); } } } }
return true; if (checkExpired(now)) { this.state.set(State.EXPIRED); return true;
public void removeExpiredSessions(Instant now) { if (sessions.isEmpty()) { return; } if (this.lock.tryLock()) { try { Iterator<InMemoryWebSession> iterator = sessions.values().iterator(); while (iterator.hasNext()) { InMemoryWebSession session = iterator.next(); if (session.isExpired(now)) { iterator.remove(); session.invalidate(); } } } finally { this.checkTime = now.plus(CHECK_PERIOD, ChronoUnit.MILLIS); this.lock.unlock(); } } } }
public void removeExpiredSessions(Instant now) { if (sessions.isEmpty()) { return; } if (this.lock.tryLock()) { try { Iterator<InMemoryWebSession> iterator = sessions.values().iterator(); while (iterator.hasNext()) { InMemoryWebSession session = iterator.next(); if (session.isExpired(now)) { iterator.remove(); session.invalidate(); } } } finally { this.checkTime = now.plus(CHECK_PERIOD, ChronoUnit.MILLIS); this.lock.unlock(); } } } }
@Override public Mono<Void> save() { checkMaxSessionsLimit(); // Implicitly started session.. if (!getAttributes().isEmpty()) { this.state.compareAndSet(State.NEW, State.STARTED); } if (isStarted()) { // Save InMemoryWebSessionStore.this.sessions.put(this.getId(), this); // Unless it was invalidated if (this.state.get().equals(State.EXPIRED)) { InMemoryWebSessionStore.this.sessions.remove(this.getId()); return Mono.error(new IllegalStateException("Session was invalidated")); } } return Mono.empty(); }
@Override public Mono<Void> save() { if (sessions.size() >= maxSessions) { expiredSessionChecker.removeExpiredSessions(clock.instant()); if (sessions.size() >= maxSessions) { return Mono.error(new IllegalStateException("Max sessions limit reached: " + sessions.size())); } } if (!getAttributes().isEmpty()) { this.state.compareAndSet(State.NEW, State.STARTED); } InMemoryWebSessionStore.this.sessions.put(this.getId(), this); return Mono.empty(); }
@Override public boolean isExpired() { return isExpired(clock.instant()); }
@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(); }
@Override public Mono<WebSession> createWebSession() { Instant now = this.clock.instant(); this.expiredSessionChecker.checkIfNecessary(now); return Mono.fromSupplier(() -> new InMemoryWebSession(now)); }
@Override public boolean isStarted() { return this.state.get().equals(State.STARTED) || !getAttributes().isEmpty(); }
@Override public boolean isStarted() { return this.state.get().equals(State.STARTED) || !getAttributes().isEmpty(); }
private boolean isExpired(Instant now) { if (this.state.get().equals(State.EXPIRED)) { return true; } if (checkExpired(now)) { this.state.set(State.EXPIRED); return true; } return false; }
private boolean checkExpired(Instant currentTime) { return isStarted() && !this.maxIdleTime.isNegative() && currentTime.minus(this.maxIdleTime).isAfter(this.lastAccessTime); }
@Override public Mono<Void> invalidate() { this.state.set(State.EXPIRED); getAttributes().clear(); InMemoryWebSessionStore.this.sessions.remove(this.id.get()); return Mono.empty(); }
@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(); }
@Override public Mono<WebSession> createWebSession() { Instant now = this.clock.instant(); this.expiredSessionChecker.checkIfNecessary(now); return Mono.fromSupplier(() -> new InMemoryWebSession(now)); }
@Override public Mono<Void> invalidate() { this.state.set(State.EXPIRED); getAttributes().clear(); InMemoryWebSessionStore.this.sessions.remove(this.id.get()); return Mono.empty(); }
@Override public boolean isStarted() { return this.state.get().equals(State.STARTED) || !getAttributes().isEmpty(); }