IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> javaweb银行转账,解决不刷新(同一次请求下)出现反复转账问题 -> 正文阅读

[网络协议]javaweb银行转账,解决不刷新(同一次请求下)出现反复转账问题

javaweb银行转账,解决不刷新反复转账问题:

问题描述:一次转账请求过程中,在不刷新的情况下,出现可以重复转账的问题。

解决办法:令牌思想解决在一次转账请求中,出现多次重复转账问题。

解决思路:就是在每一次请求转账时,前端页面附加传入一个特殊标识(相当于令牌,每次请求转账就会随机生成一个标识)传入到servlet中,每次请求转账操作完成之后,servlet服务器中将特殊标识移除掉,也就意味着,如果前端页面在不刷新的情况下,也就是在同一次请求的情况下,前端传入的标识是不变得,而servlet服务器此时的标识已经移除掉了,此时,做一个判断,若前端的令牌和servlet中的令牌标识不相等,则拒绝再次转账,也就是不能重复转账。

做法: 定义一个令牌随机生成工具类,每次生成的标识,放入到session作用区域中

TokenUtils工具类:


    /*生成一个令牌(本质是随机生成一段字符串当作标识)*/
    public static  String createToken(){
        Long time = System.currentTimeMillis();
        time = time+ new Random().nextInt(999999);
        String tokenstr = String.valueOf(time);
        return  tokenstr;
    }

    /*添加令牌*/
    public  static  void addToken(HttpServletRequest request,String token ){
        request.getSession().setAttribute(token,createToken());
    }

    /*删除令牌*/
    public static  void remove(HttpServletRequest request,String token){
        request.getSession().removeAttribute(token);
    }

jsp页面中:

<%
    /*利用工具类,生成一个令牌标识*/
    TokenUtils.addToken(request,"token");
%>

在这里插入图片描述

servlet需要做的判断操作:

  /*前台传入*/
        String token = request.getParameter("token");
        /*工具类中直接获取*/
        String tokensess = (String) request.getSession().getAttribute("token");
        
        /*判断令牌是否是空的)*/
         if(StrUtils.strBlank(token)){
            request.setAttribute("msg","令牌无效");
             request.getRequestDispatcher("message.jsp").forward(request,response);
             return;
         }

         /*判断前后令牌是否一致*/
         if(!token.equals(tokensess)){
            request.setAttribute("msg","不能重复转账");
            request.getRequestDispatcher("message.jsp").forward(request,response);
            return;
         }

        /*转账*/
        ts.sendmoney(money,fcard,tcard);
        /*完成转账,移除掉标识机符*/
        request.getSession().removeAttribute("token");
        request.getRequestDispatcher("show.jsp").forward(request,response);

第一次:
在这里插入图片描述
第一次转账成功
在这里插入图片描述
接着,同一请求下,继续转账在这里插入图片描述
结果显示:成功解决问题
在这里插入图片描述

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-09-06 11:28:49  更:2021-09-06 11:30:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年9日历 -2024/9/28 15:30:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码