Java安全之Velocity模版注入
Apache Velocity
Apache Velocity是一个基于Java的模板引擎,它提供了一个模板语言去引用由Java代码定义的对象。它允许web 页面设计者引用JAVA代码预定义的方法
Pom.xml
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>
相关文档
基本语法
语句标识符
#
用来标识Velocity的脚本语句,包括 #set
、 #if
、 #else
、 #end
、 #foreach
、 #end
、 #include
、 #parse
、 #macro
等语句。
变量
$
用来标识一个变量,比如模板文件中为 Hello $a
,可以获取通过上下文传递的 $a
声明
set
用于声明Velocity脚本变量,变量可以在脚本中声明
#set($a ="velocity")
#set($b=1)
#set($arrayName=["1","2"])
注释
单行注释为 ##
,多行注释为成对出现的 #* ............. *#
逻辑运算
== && || !
条件语句
以 if/else
为例:
#if($foo<10)
<strong>1</strong>
#elseif($foo==10)
<strong>2</strong>
#elseif($bar==6)
<strong>3</strong>
#else
<strong>4</strong>
#end
单双引号
单引号不解析引用内容,双引号解析引用内容,与PHP有几分相似
#set ($var="aaaaa")
'$var' ## 结果为:$var
"$var" ## 结果为:aaaaa
属性
通过 .
操作符使用变量的内容,比如获取并调用 getClass()
#set($e="e")
$e.getClass()
转义字符
如果 $a
已经被定义,但是又需要原样输出 $a
,可以试用 \
转义作为关键的 $
{} 标识符
"{}"用来明确标识Velocity变量;
比如在页面中,页面中有一个 s o m e o n e n a m e ,此时, V e l o c i t y 将把 s