订单防重复提交:token 发放以及校验

订单防重复提交:token 发放以及校验

1. 基于Token校验避免订单重复提交

在很多秒杀场景中,用户为了能下单成功,会频繁的点击下单按钮,这时候如果没有做好控制的话,就可能会给一个用户创建重复订单。

如何防止这个问题呢?

其实有一个好办法,那就是用户在下单的时候,带一个 token 过来,我们校验这个 token 的有效性,如果 token 有效,则允许下单,如果无效,则不允许用户下单。

注意注意注意:这里的 token 和 sa-token(鉴权token) 这个框架中的 token 不是一回事儿,也没有任何关系。
sa-token 里面的那个 token是用于登录鉴权的。
而这里的 token 是用来防止订单重复提交的,他俩不是一个 token,这里的 token 也不是 sa-token 发放的,而是我们自己实现的一个发放和存储,以及后续的校验,都是我们自己做的。

在这里插入图片描述

那么,这个 token 是如何发放和校验的的呢?
token 的发放比较简单,我们定义一个 controller,在下单页面渲染的时候从接口中获取一下就行了。

package cn.hollis.nft.turbo.web.filter;

import jakarta.servlet.*;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.redisson.api.RScript;
import org.redisson.api.RedissonClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.util.Arrays;

public class TokenFilter implements Filter {
   

    private static final Logger logger = LoggerFactory.getLogger(TokenFilter.class);

    public static final ThreadLocal<String> tokenThreadLocal = new ThreadLocal<>();

    private RedissonClient redissonClient;

    public TokenFilter(RedissonClient redissonClient) {
   
        this.redissonClient = redissonClient;
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
   
        // 过滤器初始化,可选实现
    }

    @Override
    public void doFilter(ServletReq
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

boy快快长大

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值