Merge remote-tracking branch 'origin/jetty-8'
Conflicts: jetty-server/src/main/java/org/eclipse/jetty/server/session/AbstractSessionIdManager.java
This commit is contained in:
commit
e283d72f25
|
@ -37,6 +37,7 @@ public abstract class AbstractSessionIdManager extends AbstractLifeCycle impleme
|
||||||
protected Random _random;
|
protected Random _random;
|
||||||
protected boolean _weakRandom;
|
protected boolean _weakRandom;
|
||||||
protected String _workerName;
|
protected String _workerName;
|
||||||
|
protected long _reseed=100000L;
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
/* ------------------------------------------------------------ */
|
||||||
public AbstractSessionIdManager()
|
public AbstractSessionIdManager()
|
||||||
|
@ -89,6 +90,24 @@ public abstract class AbstractSessionIdManager extends AbstractLifeCycle impleme
|
||||||
_weakRandom=false;
|
_weakRandom=false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------ */
|
||||||
|
/**
|
||||||
|
* @return the reseed probability
|
||||||
|
*/
|
||||||
|
public long getReseed()
|
||||||
|
{
|
||||||
|
return _reseed;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ------------------------------------------------------------ */
|
||||||
|
/** Set the reseed probability.
|
||||||
|
* @param reseed If non zero then when a random long modulo the reseed value == 1, the {@link SecureRandom} will be reseeded.
|
||||||
|
*/
|
||||||
|
public void setReseed(long reseed)
|
||||||
|
{
|
||||||
|
_reseed = reseed;
|
||||||
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------ */
|
/* ------------------------------------------------------------ */
|
||||||
/**
|
/**
|
||||||
* Create a new session id if necessary.
|
* Create a new session id if necessary.
|
||||||
|
@ -134,19 +153,37 @@ public abstract class AbstractSessionIdManager extends AbstractLifeCycle impleme
|
||||||
long r0=_weakRandom
|
long r0=_weakRandom
|
||||||
?(hashCode()^Runtime.getRuntime().freeMemory()^_random.nextInt()^((seedTerm)<<32))
|
?(hashCode()^Runtime.getRuntime().freeMemory()^_random.nextInt()^((seedTerm)<<32))
|
||||||
:_random.nextLong();
|
:_random.nextLong();
|
||||||
if (r0<0)
|
if (r0<0)
|
||||||
r0=-r0;
|
r0=-r0;
|
||||||
long r1=_weakRandom
|
|
||||||
?(hashCode()^Runtime.getRuntime().freeMemory()^_random.nextInt()^((seedTerm)<<32))
|
// random chance to reseed
|
||||||
:_random.nextLong();
|
if (_reseed>0 && (r0%_reseed)== 1L)
|
||||||
if (r1<0)
|
{
|
||||||
r1=-r1;
|
LOG.debug("Reseeding {}",this);
|
||||||
id=Long.toString(r0,36)+Long.toString(r1,36);
|
if (_random instanceof SecureRandom)
|
||||||
|
{
|
||||||
|
SecureRandom secure = (SecureRandom)_random;
|
||||||
|
secure.setSeed(secure.generateSeed(8));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_random.setSeed(_random.nextLong()^System.currentTimeMillis()^seedTerm^Runtime.getRuntime().freeMemory());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
long r1=_weakRandom
|
||||||
|
?(hashCode()^Runtime.getRuntime().freeMemory()^_random.nextInt()^((seedTerm)<<32))
|
||||||
|
:_random.nextLong();
|
||||||
|
if (r1<0)
|
||||||
|
r1=-r1;
|
||||||
|
|
||||||
|
id=Long.toString(r0,36)+Long.toString(r1,36);
|
||||||
|
|
||||||
//add in the id of the node to ensure unique id across cluster
|
//add in the id of the node to ensure unique id across cluster
|
||||||
//NOTE this is different to the node suffix which denotes which node the request was received on
|
//NOTE this is different to the node suffix which denotes which node the request was received on
|
||||||
if (_workerName!=null)
|
if (_workerName!=null)
|
||||||
id=_workerName + id;
|
id=_workerName + id;
|
||||||
|
|
||||||
}
|
}
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue