struts2中的token算法

今天有朋友问到struts2中的token算法,特意复习了下,看了下代码,其实是这样的,摘录如下:
  <s:token>是Struts2中为了防止表单重复提交的标签,这个标签的实现类是org.apache.struts2.views.jsp.ui.TokenTag,这个类是关键的父类是org.apache.struts2.views.jsp.ComponentTagSupport。
第一、
TokenTag ComponentTagSupport.doStartTag 将控件对象化
TokenTag ComponentTagSupport.doEndTag component.end 调用component(Token)
Token 继承自org.apache.struts2.components.UIBean,因此首先调用UIBean.end方法,在UIBean.end方法中最后一句调用定义为protected的方法evaluateExtraParams,这个方法是提供给UIBean的子类扩展使用的,在Token的evaluateExtraParams方法中
String token = buildToken(tokenName);
其中buildToken方法实际上调用的是 TokenHelper.setToken方法,在setToken方法中值得注意的是两点,
1 generateGUID()方法,此方法是生成Token值得算法所在
2 session.put(tokenName, token)可以看到此处将生成的值存储在session中,等待以后比对。
第二、
到此<s:token>已经完成了他的任务,之后的比对来判断是否为重复提交,Struts2是通过interceptor来完成的TokenInterceptor,调用TokenHelper.validToken方法,此方法从Parameters中取出token值来和session里比较,如果不一样return false



其中代码中的生成TOKEN算法,在TokenHelper代码中,

return (new BigInteger(165, RANDOM)).toString(36).toUpperCase();

这样去生成的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值