Code polish, by default does not encrypt data sent over a loopback
interface, only over remote interfaces.
This commit is contained in:
parent
7168eaadb7
commit
aae89891c0
@ -126,35 +126,30 @@ class KryoCryptoSerializationManager implements CryptoSerializationManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static class ClassSerializer {
|
||||||
|
|
||||||
static class ClassSerializer {
|
|
||||||
final Class<?> clazz;
|
final Class<?> clazz;
|
||||||
final Serializer<?> serializer;
|
final Serializer<?> serializer;
|
||||||
|
|
||||||
public
|
|
||||||
ClassSerializer(final Class<?> clazz, final Serializer<?> serializer) {
|
ClassSerializer(final Class<?> clazz, final Serializer<?> serializer) {
|
||||||
this.clazz = clazz;
|
this.clazz = clazz;
|
||||||
this.serializer = serializer;
|
this.serializer = serializer;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
static class ClassSerializer2 {
|
private static class ClassSerializer2 {
|
||||||
final Class<?> clazz;
|
final Class<?> clazz;
|
||||||
final Serializer<?> serializer;
|
final Serializer<?> serializer;
|
||||||
final int id;
|
final int id;
|
||||||
|
|
||||||
public
|
|
||||||
ClassSerializer2(final Class<?> clazz, final Serializer<?> serializer, final int id) {
|
ClassSerializer2(final Class<?> clazz, final Serializer<?> serializer, final int id) {
|
||||||
this.clazz = clazz;
|
this.clazz = clazz;
|
||||||
this.serializer = serializer;
|
this.serializer = serializer;
|
||||||
this.id = id;
|
this.id = id;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
static class RemoteClass<Iface, Impl extends Iface> {
|
private static class RemoteClass<Iface, Impl extends Iface> {
|
||||||
private final Class<Iface> ifaceClass;
|
private final Class<Iface> ifaceClass;
|
||||||
private final Class<Impl> implClass;
|
private final Class<Impl> implClass;
|
||||||
|
|
||||||
public
|
|
||||||
RemoteClass(final Class<Iface> ifaceClass, final Class<Impl> implClass) {
|
RemoteClass(final Class<Iface> ifaceClass, final Class<Impl> implClass) {
|
||||||
this.ifaceClass = ifaceClass;
|
this.ifaceClass = ifaceClass;
|
||||||
this.implClass = implClass;
|
this.implClass = implClass;
|
||||||
@ -165,19 +160,21 @@ class KryoCryptoSerializationManager implements CryptoSerializationManager {
|
|||||||
private final ObjectPool<KryoExtra> kryoPool;
|
private final ObjectPool<KryoExtra> kryoPool;
|
||||||
|
|
||||||
// used by operations performed during kryo initialization, which are by default package access (since it's an anon-inner class
|
// used by operations performed during kryo initialization, which are by default package access (since it's an anon-inner class
|
||||||
final List<Class<?>> classesToRegister = new ArrayList<Class<?>>();
|
private final List<Class<?>> classesToRegister = new ArrayList<Class<?>>();
|
||||||
final List<ClassSerializer> classSerializerToRegister = new ArrayList<ClassSerializer>();
|
private final List<ClassSerializer> classSerializerToRegister = new ArrayList<ClassSerializer>();
|
||||||
final List<ClassSerializer2> classSerializer2ToRegister = new ArrayList<ClassSerializer2>();
|
private final List<ClassSerializer2> classSerializer2ToRegister = new ArrayList<ClassSerializer2>();
|
||||||
final List<RemoteClass> remoteClassToRegister = new ArrayList<RemoteClass>();
|
private final List<RemoteClass> remoteClassToRegister = new ArrayList<RemoteClass>();
|
||||||
|
|
||||||
boolean shouldInitRMI = false;
|
private boolean shouldInitRMI = false;
|
||||||
InvokeMethodSerializer methodSerializer = null;
|
private InvokeMethodSerializer methodSerializer = null;
|
||||||
Serializer<Object> invocationSerializer = null;
|
private Serializer<Object> invocationSerializer = null;
|
||||||
RemoteObjectSerializer remoteObjectSerializer;
|
private RemoteObjectSerializer remoteObjectSerializer;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* By default, the serialization manager will compress+encrypt data to connections with remote IPs, and only compress on the loopback IP
|
||||||
|
* <p>
|
||||||
* @param references
|
* @param references
|
||||||
* If true, each appearance of an object in the graph after the first is stored as an integer ordinal. When set to true,
|
* If true, each appearance of an object in the graph after the first is stored as an integer ordinal. When set to true,
|
||||||
* {@link MapReferenceResolver} is used. This enables references to the same object and cyclic graphs to be serialized,
|
* {@link MapReferenceResolver} is used. This enables references to the same object and cyclic graphs to be serialized,
|
||||||
@ -201,6 +198,7 @@ class KryoCryptoSerializationManager implements CryptoSerializationManager {
|
|||||||
*/
|
*/
|
||||||
public
|
public
|
||||||
KryoCryptoSerializationManager(final boolean references, final boolean registrationRequired, final SerializerFactory factory) {
|
KryoCryptoSerializationManager(final boolean references, final boolean registrationRequired, final SerializerFactory factory) {
|
||||||
|
|
||||||
kryoPool = ObjectPool.NonBlockingSoftReference(new PoolableObject<KryoExtra>() {
|
kryoPool = ObjectPool.NonBlockingSoftReference(new PoolableObject<KryoExtra>() {
|
||||||
@Override
|
@Override
|
||||||
public
|
public
|
||||||
@ -503,7 +501,13 @@ class KryoCryptoSerializationManager implements CryptoSerializationManager {
|
|||||||
void writeWithCrypto(final ConnectionImpl connection, final ByteBuf buffer, final Object message) throws IOException {
|
void writeWithCrypto(final ConnectionImpl connection, final ByteBuf buffer, final Object message) throws IOException {
|
||||||
final KryoExtra kryo = kryoPool.take();
|
final KryoExtra kryo = kryoPool.take();
|
||||||
try {
|
try {
|
||||||
kryo.writeCrypto(connection, buffer, message);
|
// we only need to encrypt when NOT on loopback, since encrypting on loopback is a waste of CPU
|
||||||
|
if (connection.isLoopback()) {
|
||||||
|
kryo.writeCompressed(connection, buffer, message);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
kryo.writeCrypto(connection, buffer, message);
|
||||||
|
}
|
||||||
} finally {
|
} finally {
|
||||||
kryoPool.put(kryo);
|
kryoPool.put(kryo);
|
||||||
}
|
}
|
||||||
@ -523,7 +527,13 @@ class KryoCryptoSerializationManager implements CryptoSerializationManager {
|
|||||||
Object readWithCrypto(final ConnectionImpl connection, final ByteBuf buffer, final int length) throws IOException {
|
Object readWithCrypto(final ConnectionImpl connection, final ByteBuf buffer, final int length) throws IOException {
|
||||||
final KryoExtra kryo = kryoPool.take();
|
final KryoExtra kryo = kryoPool.take();
|
||||||
try {
|
try {
|
||||||
return kryo.readCrypto(connection, buffer, length);
|
// we only need to encrypt when NOT on loopback, since encrypting on loopback is a waste of CPU
|
||||||
|
if (connection.isLoopback()) {
|
||||||
|
return kryo.readCompressed(connection, buffer, length);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return kryo.readCrypto(connection, buffer, length);
|
||||||
|
}
|
||||||
} finally {
|
} finally {
|
||||||
kryoPool.put(kryo);
|
kryoPool.put(kryo);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user