From 84b78f9bf61038a6f8c7b2ef5af28ed481adce49 Mon Sep 17 00:00:00 2001 From: felmer <felmer> Date: Tue, 9 Sep 2008 06:52:15 +0000 Subject: [PATCH] LMS-445 expiration time added to BasicSession SVN: 8237 --- .../cisd/authentication/BasicSession.java | 15 +++++++++++++-- .../authentication/DefaultSessionManager.java | 19 +++++++------------ .../cisd/authentication/ISessionFactory.java | 6 +++--- .../DefaultSessionManagerTest.java | 4 ++-- 4 files changed, 25 insertions(+), 19 deletions(-) diff --git a/authentication/source/java/ch/systemsx/cisd/authentication/BasicSession.java b/authentication/source/java/ch/systemsx/cisd/authentication/BasicSession.java index c738e06377d..9da4fc3e462 100644 --- a/authentication/source/java/ch/systemsx/cisd/authentication/BasicSession.java +++ b/authentication/source/java/ch/systemsx/cisd/authentication/BasicSession.java @@ -35,25 +35,28 @@ public class BasicSession implements Serializable private final Principal principal; private final String remoteHost; private final long sessionStart; + private final int sessionExpirationTime; /** * Creates an instance from the specified session token, user name, principal, remoteHost, and * session start (in milliseconds since start of the epoch). */ public BasicSession(String sessionToken, String userName, Principal principal, - String remoteHost, long sessionStart) + String remoteHost, long sessionStart, int sessionExpirationTime) { assert sessionToken != null : "Given session token can not be null."; assert userName != null : "Given user name can not be null."; assert principal != null : "Given principal can not be null."; assert sessionStart > 0 : "Given session start must be larger than zero."; assert remoteHost != null : "Given remote host can not be null"; + assert sessionExpirationTime >= 0; this.sessionToken = sessionToken; this.userName = userName; this.principal = principal; this.remoteHost = remoteHost; this.sessionStart = sessionStart; + this.sessionExpirationTime = sessionExpirationTime; } /** @@ -96,7 +99,15 @@ public class BasicSession implements Serializable { return sessionStart; } - + + /** + * Returns the expiration time of this session in milliseconds. + */ + public final int getSessionExpirationTime() + { + return sessionExpirationTime; + } + @Override public String toString() { diff --git a/authentication/source/java/ch/systemsx/cisd/authentication/DefaultSessionManager.java b/authentication/source/java/ch/systemsx/cisd/authentication/DefaultSessionManager.java index fcbeed50625..f8239cab855 100644 --- a/authentication/source/java/ch/systemsx/cisd/authentication/DefaultSessionManager.java +++ b/authentication/source/java/ch/systemsx/cisd/authentication/DefaultSessionManager.java @@ -57,24 +57,19 @@ public class DefaultSessionManager<T extends BasicSession> implements ISessionMa private static final TokenGenerator tokenGenerator = new TokenGenerator(); - private static final class FullSession<S> + private static final class FullSession<S extends BasicSession> { /** Session data. */ private final S session; - /** The time period of inactivity (in milliseconds) after which the session will expire. */ - private final long expirationPeriodMillis; - /** The last time when this session has been used (in milliseconds since 1970-01-01). */ private long lastActiveTime; - FullSession(final S session, final long expirationPeriodMillis) + FullSession(final S session) { assert session != null : "Undefined session"; - assert expirationPeriodMillis >= 0; // == 0 is for unit tests this.session = session; - this.expirationPeriodMillis = expirationPeriodMillis; touch(); } @@ -100,7 +95,7 @@ public class DefaultSessionManager<T extends BasicSession> implements ISessionMa */ boolean hasExpired() { - return System.currentTimeMillis() - lastActiveTime > expirationPeriodMillis; + return System.currentTimeMillis() - lastActiveTime > session.getSessionExpirationTime(); } } @@ -119,7 +114,7 @@ public class DefaultSessionManager<T extends BasicSession> implements ISessionMa private final IRemoteHostProvider remoteHostProvider; /** The time after which an inactive session will be expired (in milliseconds). */ - private final long sessionExpirationPeriodMillis; + private final int sessionExpirationPeriodMillis; public DefaultSessionManager(final ISessionFactory<T> sessionFactory, final ILogMessagePrefixGenerator<T> prefixGenerator, @@ -138,7 +133,7 @@ public class DefaultSessionManager<T extends BasicSession> implements ISessionMa this.authenticationService = authenticationService; this.remoteHostProvider = remoteHostProvider; sessionExpirationPeriodMillis = - sessionExpirationPeriodMinutes * DateUtils.MILLIS_PER_MINUTE; + (int) (sessionExpirationPeriodMinutes * DateUtils.MILLIS_PER_MINUTE); operationLog.info(String.format("Authentication service: '%s'", authenticationService .getClass().getName())); @@ -154,9 +149,9 @@ public class DefaultSessionManager<T extends BasicSession> implements ISessionMa synchronized (sessions) { final T session = - sessionFactory.create(sessionToken, user, principal, getRemoteHost(), now); + sessionFactory.create(sessionToken, user, principal, getRemoteHost(), now, sessionExpirationPeriodMillis); final FullSession<T> createdSession = - new FullSession<T>(session, sessionExpirationPeriodMillis); + new FullSession<T>(session); sessions.put(user, createdSession); return session; } diff --git a/authentication/source/java/ch/systemsx/cisd/authentication/ISessionFactory.java b/authentication/source/java/ch/systemsx/cisd/authentication/ISessionFactory.java index 614bc1fdd5b..aaa93a6c4db 100644 --- a/authentication/source/java/ch/systemsx/cisd/authentication/ISessionFactory.java +++ b/authentication/source/java/ch/systemsx/cisd/authentication/ISessionFactory.java @@ -24,9 +24,9 @@ package ch.systemsx.cisd.authentication; public interface ISessionFactory<T extends BasicSession> { /** - * Creates a session from the specified session token, user name, principal, remoteHost, and - * session start (in milliseconds since start of the epoch). + * Creates a session from the specified session token, user name, principal, remoteHost, session + * start (in milliseconds since start of the epoch), and expiration time (in milliseconds). */ public T create(String sessionToken, String userName, Principal principal, - String remoteHost, long sessionStart); + String remoteHost, long sessionStart, int sessionExpirationTime); } diff --git a/authentication/sourceTest/java/ch/systemsx/cisd/authentication/DefaultSessionManagerTest.java b/authentication/sourceTest/java/ch/systemsx/cisd/authentication/DefaultSessionManagerTest.java index 2f25c0e9045..7051af6273a 100644 --- a/authentication/sourceTest/java/ch/systemsx/cisd/authentication/DefaultSessionManagerTest.java +++ b/authentication/sourceTest/java/ch/systemsx/cisd/authentication/DefaultSessionManagerTest.java @@ -117,9 +117,9 @@ public class DefaultSessionManagerTest one(sessionFactory) .create(with(any(String.class)), with(equal(user)), with(equal(principal)), with(equal(REMOTE_HOST)), - with(any(Long.class))); + with(any(Long.class)), with(any(Integer.class))); BasicSession session = - new BasicSession(user + "-1", user, principal, REMOTE_HOST, 42L); + new BasicSession(user + "-1", user, principal, REMOTE_HOST, 42L, 0); will(returnValue(session)); atLeast(1).of(prefixGenerator).createPrefix(session); -- GitLab