15.6.1 应用<ww:token>标签
<ww:token>标签创建一个新的表单标记(token),并用token做关键值把token的值保存到session中。这个token的值是一个经过加密的、非常安全的UUID,所以我们不用担心出现重复的token值或者用户推测出token值。这是因为在表单中的token值是一个随机的32位字符(包括字母A至Z和数字):有3236个可能的值,这需要花几千年时间来推测。例程15-12演示了一个使用token标签的例子。
例程15-12 在表单中使用token标签
<ww:form action="saveCategory">
<ww:token name="category.token"/>
<ww:if test="category.id != null">
<ww:hidden name="categoryId" value="%{category.id}"/>
</ww:if>
<ww:select label="%{getText('text.parent')}"
name="category.parentCategory"
value="category.parentCategory.id"
list="#categoryPicker.categories"
listKey="id"
listValue="#indent({top, ''}) + name" />
<ww:textfield label="%{getText('text.name')}"
name="category.name"/>
<ww:submit value="Save"/>
</ww:form>
在这里,token标签指定了一个name属性。如果没有指定标记(token)名称,WebWork会使用一个默认的标记(token)名称。不论是默认的还是指定的标记(token)名称,它在任何时候都会得到一个有效的token值。这就意味着你可以使用不同的标记(token)名称来保护Web应用的不同部分。token标签在表单中创建两个隐藏的输入字段,一个保存标记(token)名称,一个保存标记(token)的值。在表单提交到服务器以后,Token Interceptor会读取这两个表单字段。下面是<ww:token>标签输出内容的例子:
<input type="hidden"
name="webwork.token.name"
bbbbbvalue="category.token"/>
<input type="hidden" name="category.token"
bbbvalue="F0DVU9PRT393S28Z3EO5K5JNNLCA6NQJ"/>
第一个隐藏字段指定了真正的表单标记(token)的名称。在这个例子中,因为我们进行了特殊指定,所以表单标记(token)应该是category.token。第二个隐藏字段的名称是上面指定的表单标记(token)的名称,而这个隐藏字段值是一个加密过的标记(token)值。







