首页 ┆ 网站地图 ┆ 在线留言 ┆ 游戏资讯 ┆ 资源下载 ┆ 端午节祝福 ┆ 迅雷在线影视 ┆淘宝手机在线充值 ┆淘宝游戏点卡充值 
设为首页
加入收藏
联系我们
高级搜索
您当前的位置: 主页>JAVA专区>JSP>jsp利用Session防止表单重复提交
jsp利用Session防止表单重复提交
来源: 发布时间:2008-04-01 发布人: 浏览: 人次   字体: [ ]  

(1)包含有Form表单得页面必须通过一个服务器程序动态生成,服务器程序为每次产生得页面中的form表单都分配一个唯一得随机标识号,并在form表单得一个隐藏域保存

(2)当用户提交form得时候,负责接受这一请求得服务器程序比较form表单隐藏字段中的标识号与存贮在session中的是否相同,当下列情情况时候,服务器程序将忽略提交请求:

      a.当前用户session不存在表单标识
      b.用户提交得表单数据并没有标识号字段
      c.存贮在当前用户的session中得标识号与表单数据中的不同

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;


public class TokenProcessor {
   
private long privious;//上次生成表单标识号得时间值
   private static TokenProcessor instance=new TokenProcessor();
   
public static String FORM_TOKEN_KEY="FORM_TOKEN_KEY";
   
private TokenProcessor(){
       
   }

   
public static TokenProcessor getInstance(){
       
return instance;
   }

   
/*
    * 验证请求中得标识号是否有效,如果请求中的表单标识与当前用户session中的相同,返回结果true=
    
*/

   
public synchronized boolean isTokenValid(HttpServletRequest request){
       
//未避免session对象不存在时候创建Session对象
       HttpSession session=request.getSession(false);
       
if(session==null){return false;}
       String saved
=(String)session.getAttribute(FORM_TOKEN_KEY);
       
if(saved==null){
           
return false;
       }

       String token
=(String)request.getParameter(FORM_TOKEN_KEY);
       
if(token==null){
           
return false;
       }

       
return saved.equals(token);
   }

   
   
/*
    * 清楚存储在当前用户session中的表单标识号
    
*/

   
public synchronized void reset(HttpServletRequest request){
       HttpSession session
=request.getSession(false);
       
if(session==null){
           
return;
       }

       session.removeAttribute(FORM_TOKEN_KEY);
   }

   
   
/*
    * 产生表单标识号并将之保存在当前用户得session中
    
*/

   
   
public synchronized void saveToken(HttpServletRequest request){
       HttpSession session
=request.getSession();
       
try {
        
byte id[]=session.getId().getBytes();
        
long current=System.currentTimeMillis();
        
if(current==privious){
            current
++;
        }

        privious
=current;
        
byte now[]=String.valueOf(current).getBytes();
        MessageDigest md
=MessageDigest.getInstance("MD5");
        md.update(id);
        md.update(now);
        String token
=toHex(md.digest());
        session.setAttribute(FORM_TOKEN_KEY, token);
      }
 catch (NoSuchAlgorithmException e) {
        
      }

   }

   
/*
    * 将一个字节数转换成十六进制得字符串
    * 
    
*/

   
public String toHex(byte buffer[]){
       StringBuffer sb
=new StringBuffer(buffer.length*2);
       
for (int i = 0; i < buffer.length; i++{
        sb.append(Character.forDigit((buffer[i]
&0x60)>>416));
        sb.append(Character.forDigit(buffer[i]
&0x0f16));
    }

       
return sb.toString();
       
   }

}

 


共2页: 上一页 1 [2] 下一页
相 关 文 章   发布商链接
·Java使用ANT在线编译不用重启tomcat...
·JSP彩色验证码生成实例代码
·Jsp实现网站用户注册使用激活码的代...
·实例讲解JSP和JavaScript实现的二级...
·当jsp和servlet出现乱码问题后的解决...
·实例代码讲解jsp上传图片并过滤图片...
·三种方法讲解在java实现URL重写的代...
·JSP上传图片的代码提供
·javat实现正则表达式只替换URL字符串...
·实例配置如何在eclipse中调试jsp程序
 §最新评论:(评论内容只代表网友观点,与本站立场无关!)
网名: 验证码:  【所有评论】【↑返回顶部
评 分: 12 345
评论内容:(不能超过500字,请自觉遵守互联网相关政策法规。[按 Ctrl+Enter 可直接提交]
注意:请勿在本站发布政治话题、色情及违反法律的内容。
IT知道网 声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。
推 荐 文 章
·Jsp实现网站用户注册使用激活
·JSP彩色验证码生成实例代码
·Java使用ANT在线编译不用重启...
·Java防止非法和重复表单提交...
·JSP报表打印的一种简单解决方
·Servlet 采用forward 时,页面
·jsp生成验证码图片的程序
·jsp+ajax技术实现行政区划代...
·JSP防止表单重复提交的三种方
·Ajax+servlet实现页面无刷新...
·经验总结java利用jacob操作wo...
·祥解JSP中的标签库
·JSP实现统计当前在线人数的实
·基于JSP的ajax用户注册验证代
·八步实现JSP报表打印
热 门 文 章
·经验总结java利用jacob操作wo...
·jsp+ajax技术实现行政区划代...
·使用struts upload包进行文件...
·基于JSP的ajax用户注册验证代...
·通过流或利用jspsmartupload....
·Jsp页面列表组件框架设计
·Java防止非法和重复表单提交...
·Jsp分页组件制作实例,可以解...
·Ajax+servlet实现页面无刷新...
·JSP防止表单重复提交的三种方...
·八步实现JSP报表打印
·JSP上传图片的代码提供
·实现jsp页面二级下拉框联动,...
·实例代码讲解jsp上传图片并过...
·实例讲解jsp生成静态网页代码...
网站首页 - 关于本站 - 加入收藏 - 网站地图 - 友情连接 - 在线留言 - 联系我们 - 返回顶部
Copyright © 2007 IT知道网.[冀ICP备07026896号]. All Rights Reserved .