Allow plugins to replace the WebSession implementation

Plugins can replace the existing implementation with the statement:
DynamicItem.bind(binder(), WebSession.class).to(...);
in a module designated as a "<Gerrit-HttpModule>" in the manifest.

Just the Cache implementation used for web sessions can be changed
by binding to a subclass of the now abstract CacheBasedWebSession
which supplies the Cache in the superclass constructor.

This is a step towards solving web session issues with multi-master.

Change-Id: I255661a62cfcbfe07646cb90005764061d618f3d
This commit is contained in:
Ahaan Ugale
2013-07-17 11:59:13 -06:00
committed by Martin Fick
parent 8663d378f4
commit 3e107f55d7
22 changed files with 153 additions and 78 deletions

View File

@@ -34,8 +34,7 @@ import com.google.gerrit.reviewdb.client.AccountExternalId;
import com.google.gerrit.server.config.ConfigUtil;
import com.google.gerrit.server.config.GerritServerConfig;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.google.inject.name.Named;
import com.google.inject.assistedinject.Assisted;
import org.eclipse.jgit.lib.Config;
import org.slf4j.Logger;
@@ -49,10 +48,9 @@ import java.io.Serializable;
import java.security.SecureRandom;
import java.util.concurrent.TimeUnit;
@Singleton
class WebSessionManager {
public class WebSessionManager {
private static final Logger log = LoggerFactory.getLogger(WebSessionManager.class);
static final String CACHE_NAME = "web_sessions";
public static final String CACHE_NAME = "web_sessions";
private final long sessionMaxAgeMillis;
private final SecureRandom prng;
@@ -60,7 +58,7 @@ class WebSessionManager {
@Inject
WebSessionManager(@GerritServerConfig Config cfg,
@Named(CACHE_NAME) final Cache<String, Val> cache) {
@Assisted final Cache<String, Val> cache) {
prng = new SecureRandom();
self = cache;
@@ -180,7 +178,7 @@ class WebSessionManager {
}
}
static final class Val implements Serializable {
public static final class Val implements Serializable {
static final long serialVersionUID = 2L;
private transient Account.Id accountId;