public String generateToken() throws Exception { String token = System.currentTimemillis() + new Random().nextInt() + ""; MessageDigest md = new MessageDigest("md5");//可得到数据的摘要指纹,长度一致 byte[] md5 = md.digest(token.getBytes());//长度统一为16字节 BASE64Encoder encoder = new BASE64Encoder();//可以将任何字节数组转换为正常的字符串 return encoder.encode(md5); }
BASE64Encoder在JSE的API文档中是找不到的,它不是SUN公司正式发布的API,可以通过在Eclipse中使用后查看相关信息
BASE64Encoder编码将3个字节即24位的二进制码自动转换为4个字节即32位的二进制码,它将原来的24位按每份6位分成4份,再在每份的前面2位补0,而实现,所以该编码生成的每个字节的数据范围是:00000000——00111111即0到63,共64个数据,每个数据单独对应一个唯一的数据信息。
可以用来防止表单重复提交:
用户访问页面时,服务器随机生成一个标识符token保存到会话中,并以隐藏元素形式回写到表单中,处理表单后删除会话中的token属性
用户提交表单后,服务器进行验证:
1,是否有token元素,有就进行下一步,没有就不处理表单
2,会话中是否有token属性,有就进行下一步,没有就不处理表单
3,会话中的token属性值是否与用户提交的相同,相同就进行下一步,不同就不处理表单
4,处理表单,并将会话中的token属性删除
这是服务器端防止表单重复提交的方法,客户端要要通过js代码来控制.
时间: 2024-11-05 14:55:05