From 0fd7dfb407b2beb25ff84fe604f0fc90e6c04095 Mon Sep 17 00:00:00 2001 From: Nikita Koksharov Date: Tue, 27 Aug 2024 10:02:54 +0300 Subject: [PATCH] Fixed - allowed classes can't be defined in FuryCodec --- .../java/org/redisson/codec/FuryCodec.java | 34 ++++++++++++------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/redisson/src/main/java/org/redisson/codec/FuryCodec.java b/redisson/src/main/java/org/redisson/codec/FuryCodec.java index 32546a145..a85db3b74 100644 --- a/redisson/src/main/java/org/redisson/codec/FuryCodec.java +++ b/redisson/src/main/java/org/redisson/codec/FuryCodec.java @@ -32,6 +32,8 @@ import org.redisson.client.protocol.Decoder; import org.redisson.client.protocol.Encoder; import java.io.IOException; +import java.util.Collections; +import java.util.Set; /** * Apache Fury codec @@ -44,35 +46,35 @@ import java.io.IOException; public class FuryCodec extends BaseCodec { private final ThreadSafeFury fury; - private final boolean registrationRequired; + private final Set allowedClasses; private final Language language; public FuryCodec() { - this(null, false, Language.JAVA); + this(null, Collections.emptySet(), Language.JAVA); } - public FuryCodec(boolean registrationRequired) { - this(null, registrationRequired, Language.JAVA); + public FuryCodec(Set allowedClasses) { + this(null, allowedClasses, Language.JAVA); } public FuryCodec(Language language) { - this(null, false, language); + this(null, Collections.emptySet(), language); } - public FuryCodec(boolean registrationRequired, Language language) { - this(null, registrationRequired, language); + public FuryCodec(Set allowedClasses, Language language) { + this(null, allowedClasses, language); } public FuryCodec(ClassLoader classLoader, FuryCodec codec) { - this(classLoader, codec.registrationRequired, codec.language); + this(classLoader, codec.allowedClasses, codec.language); } public FuryCodec(ClassLoader classLoader) { - this(classLoader, false, Language.JAVA); + this(classLoader, Collections.emptySet(), Language.JAVA); } - public FuryCodec(ClassLoader classLoader, boolean registrationRequired, Language language) { - this.registrationRequired = registrationRequired; + public FuryCodec(ClassLoader classLoader, Set allowedClasses, Language language) { + this.allowedClasses = allowedClasses; this.language = language; FuryBuilder builder = Fury.builder(); @@ -80,8 +82,16 @@ public class FuryCodec extends BaseCodec { builder.withClassLoader(classLoader); } builder.withLanguage(language); - builder.requireClassRegistration(registrationRequired); + builder.requireClassRegistration(!allowedClasses.isEmpty()); fury = builder.buildThreadSafeFuryPool(10, 512); + + for (String allowedClass : allowedClasses) { + try { + fury.register(Class.forName(allowedClass)); + } catch (ClassNotFoundException e) { + throw new IllegalStateException(e); + } + } } private final Decoder decoder = new Decoder() {