JFinal 的 creatToken 和 Token 验证有关系吗?

如题,因为手册上没写,百度到的也是几年前的答案。求解

评论区

JFinal

2017-07-17 21:23

在第一个 action 中先使用 createToken 创建 token,回到页面时将该 token 值放入表单隐藏域中与数据一起提交到第二个 action,在第二个 action 中通过 validateToken 验证,用来判断是否重复提交

maxwade

2018-02-27 11:05

所以createtoken()相当于创建一个隐藏参数,用于第二个action中的校验了?是可这样理解吗?

JFinal

2018-02-27 18:21

@maxwade 可以这样理解,虽然有个约定的隐藏参数
这个约定的参数在 com.jfinal.core.Const.java 中有定义:
String DEFAULT_TOKEN_NAME = "_jfinal_token";

但是,这个 "_jfinal_token" 名是不需要关注的,因为 jfinal 还会帮你生成整个隐藏表单域的内容,如下:
StringBuilder sb = new StringBuilder();
sb.append("<input type='hidden' name='").append(tokenName).append("' id='").append(tokenName).append("' value='").append(tokenId).append("' />");
controller.setAttr("token", sb.toString());

注意看最后一行代码,用户所需要做的,只需要在表单步通过下面的代码输出该 input
隐藏域:
#(token)

上面的 #(token) 用在 form 表单之中,剩下的事情就是: validateToken() 了

himans

2020-07-16 10:50

Controller代码看到Token这里,搜了一下,收藏了。