设为首页 加入收藏

TOP

切面实现下单请求防重提交功能(自定义注释@repeatSubmit)(二)
2023-08-26 21:11:22 】 浏览:57
Tags:单请求 @repeatSubmit
@Value("${spring.redis.password}") private String redisPwd; /** * 配置分布式锁的redisson * @return */ @Bean public RedissonClient redissonClient(){ Config config = new Config(); //单机方式 config.useSingleServer().setPassword(redisPwd).setAddress("redis://"+redisHost+":"+redisPort); //集群 //config.useClusterServers().addNodeAddress("redis://192.31.21.1:6379","redis://192.31.21.2:6379") RedissonClient redissonClient = Redisson.create(config); return redissonClient; } /** * 集群模式 * 备注:可以用"rediss://"来启用SSL连接 */ /*@Bean public RedissonClient redissonClusterClient() { Config config = new Config(); config.useClusterServers().setScanInterval(2000) // 集群状态扫描间隔时间,单位是毫秒 .addNodeAddress("redis://127.0.0.1:7000") .addNodeAddress("redis://127.0.0.1:7002"); RedissonClient redisson = Redisson.create(config); return redisson; }*/ }
  • 使用说明:在下单接口标注@RepeatSubmit(limitType = RepeatSubmit.Type.TOKEN)
  • 或者@RepeatSubmit(limitType = RepeatSubmit.Type.PARAM)
    /**
     * 下单前获取令牌,用于防重提交
     * @return
     */
    @GetMapping("token")
    public JsonData getOrderToken() {

        Long accountNo = LoginInterceptor.threadLocal.get().getAccountNo();

        String token = CommonUtil.getStringNumRandom(32);

        String key = String.format(RedisKey.SUBMIT_ORDER_TOKEN_KEY, accountNo, token);
        // token 过期时间30分钟
        redisTemplate.opsForValue().set(key, String.valueOf(Thread.currentThread().getId()), 30, TimeUnit.MINUTES);

        return JsonData.buildSuccess(token);
    } 	


	@PostMapping("confirm")
    @RepeatSubmit(limitType = RepeatSubmit.Type.TOKEN)
    public void confirmOrder(@RequestBody ConfirmOrderRequest orderRequest, HttpServletResponse response) {
        // TODO 下单业务
    }
首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇9、Spring之代理模式 下一篇SpringBoot3之Web编程

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目