Merge branch 'master' into bug5049

This commit is contained in:
Steffen Schaefer committed 2019-05-27 15:03:18 +02:00
commit 1db9349d61
18 files changed
+273 -89

No files matched your search

@@ -1,7 +1,5 @@
package com.sap.sse.security;
import java.util.WeakHashMap;
import org.apache.shiro.session.InvalidSessionException;
import org.apache.shiro.session.Session;
import org.apache.shiro.session.SessionException;
@@ -13,6 +11,7 @@ import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;
import com.sap.sse.common.Duration;
import com.sap.sse.common.impl.MillisecondsDurationImpl;
import com.sap.sse.common.impl.MillisecondsTimePoint;
import com.sap.sse.concurrent.ConcurrentWeakHashMap;
import com.sap.sse.util.TimerWithRunnable;
/**
@@ -39,7 +38,9 @@ public class SecurityWebSessionManager extends DefaultWebSessionManager {
*/
private static final Duration MAX_DURATION_AFTER_WHICH_TO_PING_SESSION = Duration.ONE_HOUR;
private static final WeakHashMap<Session, Void> sessionsAlreadyScheduledForOnChange = new WeakHashMap<>();
private static final Object DUMMY = new Object(); // for use as dummy value in sessionsAlreadyScheduledForOnChange
private static final ConcurrentWeakHashMap<Session, Object> sessionsAlreadyScheduledForOnChange = new ConcurrentWeakHashMap<>();
public SecurityWebSessionManager() {
super();
@@ -56,7 +57,7 @@ public class SecurityWebSessionManager extends DefaultWebSessionManager {
private void triggerOnChangeLatestInHalfTimeoutPeriod(Session s) {
Duration sendDurationLatestIn = new MillisecondsDurationImpl(s.getTimeout()).minus(MAX_DURATION_ASSUMED_FOR_MESSAGE_DELIVERY);
if (!sessionsAlreadyScheduledForOnChange.containsKey(s)) {
sessionsAlreadyScheduledForOnChange.put(s, null);
sessionsAlreadyScheduledForOnChange.put(s, DUMMY);
timer.schedule(()->{ onChange(s); sessionsAlreadyScheduledForOnChange.remove(s); },
MillisecondsTimePoint.now().plus(
sendDurationLatestIn.compareTo(MAX_DURATION_AFTER_WHICH_TO_PING_SESSION) > 0 ?