防表单重复提交中的小问题

1.服务器端防表单重复提交:

为每个表单设置一个令牌token,通过session存放在服务器端,并发给用户。当用户第一次带着令牌来的时候,允许提交,并且之后将服务器端的表单令牌即session中的token删除。

下一次用户重复提交表单时,没有表单了,则无法提交。

其中用到2个新算法:

     (1) 指纹算法

         

String token = System.currentTimeMills() + new Randow().nextInt() + "";
MessageDigest md = MessageDigest.getInstance("md5");
byte[] md5 = md.digest(token.getBytes());


        因为一个随机数可能是任意位数的数,我们需要将这些随机数统一位数。所以采取指纹算法,得到它们的数据摘要,这样就保证了位数一致。

     (2)base64 编码

BASE64Encoder encoder = new BASE64Encoder();
String str = encoder.encode(md5);
       通过指纹算法得到的同位数随机数是以二进制数组返回的。不能简单的封装到String中,因为在转换过程中有些随机数可能在码表中查不到就会得到很多乱码。所以我们需要用base64编码技术将二进制数变为我们键盘上的明码,再返回给上层。

base64编码算法: 将每3个字节的数存入4个字节中。即每6bit 二进制数,转存到8bit中,补上2个前导0。则转换之后每个字节的有效位为后6位。这样做之后,就可以将任意的6位二进制数 都转换为00000000~00111111 中,即0~63由于base64自带码表将0~63都映射到了键盘的上每个可见明码。所以通过这种算法就能将任意的二进制数转换为键盘上的可见明码。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值