分享

token机制

 ThinkTank_引擎 2015-12-15

  if (this.isTokenValid(request)){

                    
//第一次进入页面上的token和session中的token相等


        this.saveToken(request);//更换session中的值,注意:一旦更换页面上的token也随之更换,

                                 
//
但是你按F5重复提交时,地址上的参数org.apache.struts.taglib.html.TOKEN还是上一次的token值,

                                 
//
所以即使页面上的token换了,但是传过来的是原来的.所以第二次传时就和session中的不相同了

                                      
//如果不是F5刷新的话,传到action中的就是页面上的最新的token


        }
else
{

            logger.info(
"检测到删除广告请求重复提交!此次不提交!"
);

        }








 Add.jsp   注册新用户页面



   InsertSuccessed.jsp   新记录添加成功


   InsertFailed.jsp       新记录添加失败


   Insertrepetition       重复添加提示


   流程:     在首面里点击"添加新用户后"  ----进入到Add.jsp----填写好表单后提交----


               成功----  insertSuccessed.jsp   新记录添加成功


               失败----   InsertFailed.jsp       新记录添加失败


               重复提交(或在insertSuccessed.jsp页刷新)----   Insertrepetition       重复添加提示


   Action 结构:


   因为用的是MappingDispatchAction,


   addjump 事件        用于从首面跳转到Add.jsp用的


   insert事件           添加一条记录


   首先要在表单提交前(也就是跳转到Add.jsp时)保存一个Token,所以在addjump 事件里要有 saveToken(request,true)语句; 这时你可以在Add.jsp的源码中看到一个隐藏域, 如:〈input type="hidden" name="org.apache.struts.taglib.html.TOKEN" value="6aa35341f25184fd996c4c918255c3ae"〉


   提交上来后,到了insert事件里面了,这里要判断请求中的Token 和保存在会话中的Token是否一样,如果一样,则表明是第一次提交.如果不一样,则表明是"重复提交".


   所以在insert 事件中要有判断的代码:


   view plaincopy to clipboardprint?

    if (isTokenValid(request, true)) {


     // 表单不是重复提交


     //这里是保存数据的代码


     } else {


     //表单重复提交


     saveToken(request);


     //其它的处理代码


     }


    if (isTokenValid(request, true)) {


     // 表单不是重复提交


     //这里是保存数据的代码


     } else {


     //表单重复提交


     saveToken(request);


     //其它的处理代码


     }


 


  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多