0


SpringBoot+Ajax+redis实现隐藏重要接口地址

在这里插入图片描述

** 🏡浩泽学编程:个人主页
** 🔥 推荐专栏
:《深入浅出SpringBoot》《java对AI的调用开发》
《RabbitMQ》《Spring》《SpringMVC》《项目实战》🛸学无止境,不骄不躁,知行合一

文章目录


前言

本篇文章主要讲诉使用SpringBoot项目配合Ajax和redis实现隐藏重要接口地址,这里我以隐藏秒杀地址为例。


一、Ajax实现

前端代码

简单实现秒杀按钮,input标签里存入的是秒杀商品的id,不许展示,所以隐藏。可以看到,点击秒杀按钮会触发getSeckillPath函数(获取秒杀地址的函数)。

<buttonclass="btn btn-primary"type="submit"id="buyButton"onclick="getSeckillPath()">立即秒杀
  <inputtype="hidden"name="goodsId"id="goodsId"></button>

Ajax逻辑实现

  • 基本逻辑:当页面触发获取秒杀地址的函数,然后ajax异步请求服务器端获取秒杀地址,服务器端返回随机生成的秒杀地址,然后将返回对象作为参数传入秒杀函数,秒杀函数中ajax将秒杀地址拼接获取完整秒杀地址向服务器端发送秒杀请求。
  • 实现: - 真正秒杀地址:/seckill/path/doSeckill- path是秒杀时随机生成的,存入redis,以便后续访问秒杀地址时比对是否时实时生成的正确秒杀地址
//获取path:秒杀地址的拼接路径functiongetSeckillPath(){//获取秒杀商品idvar goodsId =$("#goodsId").val();
        $.ajax({url:"/seckill/path",type:"GET",data:{goodsId: goodsId,},success:function(data){if(data.code ==200){var path = data.obj;//获取path后调取真正的秒杀地址doSecKill(path);}else{
                    layer.msg(data.message);}},error:function(){
                layer.msg("客户端请求错误");}});}//真正的秒杀方法functiondoSecKill(path){
        $.ajax({//将获取的path进行拼接得到真正的秒杀地址url:'/seckill/'+ path +'/doSeckill',type:"POST",data:{goodsId:$('#goodsId').val()},success:function(data){if(data.code ==200){// 获取秒杀结果,这个函数不再贴出,自己根据项目自行实现getResult($("#goodsId").val());}else{
                    layer.msg(data.message);}},error:function(){
                layer.msg("客户端请求出错");}});}

二、服务器端实现

RespBean、RespBeanEnum是自己封装的错误封装类和错误枚举类型,无需在意,只需要知道RespBean.error代表返回错误,RespBean.success()代表返回成功。

获取秒杀地址:

/**
     * @Description: 获取秒杀地址
     * @param user
     * @param goodsId
     * @param captcha
     * @methodName: getPath
     * @return: com.example.seckill.vo.RespBean
     * @Author: dragon_王
     * @Date: 2024-03-03 12:36:46
     */@GetMapping(value ="/seckill/path")@ResponseBodypublicRespBeangetPath(User user,Long goodsId){if(user ==null){returnRespBean.error(RespBeanEnum.SESSION_ERROR);}String str = orderService.createPath(user, goodsId);returnRespBean.success(str);}

创建秒杀地址:

@OverridepublicStringcreatePath(User user,Long goodsId){//利用UUID随机生成秒杀地址//然后对地址进行简单md5加密String str =MD5Util.md5(UUIDUtil.uuid()+"123456");//加密后地址存入redis
        redisTemplate.opsForValue().set("seckillPath:"+ user.getId()+":"+ goodsId, str,1,TimeUnit.MINUTES);return str;}

真正的秒杀请求:

@RequestMapping(value ="/seckill/{path}/doSeckill",method =RequestMethod.POST)@ResponseBodypublicRespBeandoSeckill(@PathVariableString path,User user,Long goodsId){if(user ==null){returnRespBean.error(RespBeanEnum.SESSION_ERROR);}//检测秒杀地址是否正确boolean check = orderService.checkPath(user, goodsId, path);if(!check){returnRespBean.error(RespBeanEnum.REQUEST_ILLEGAL);}//......//真正秒杀逻辑实现,自己自行实现,不再赘诉//......returnRespBean.success(0);}

检查秒杀地址的方法:

/**
     * @Description: 检查秒杀地址
     * @param user
     * @param goodsId
     * @param path
     * @methodName: checkPath
     * @return: boolean
     * @Author: dragon_王
     * @Date: 2024-03-03 15:47:55
     */@OverridepublicbooleancheckPath(User user,Long goodsId,String path){if(user ==null|| goodsId <0||StringUtils.isEmpty(path)){returnfalse;}String redisPath =(String) redisTemplate.opsForValue().get("seckillPath:"+ user.getId()+":"+ goodsId);return path.equals(redisPath);}

总结

以上就是SpringBoot+Ajax实现隐藏重要接口地址的实现。

标签: spring boot ajax java

本文转载自: https://blog.csdn.net/weixin_62951900/article/details/136559425
版权归原作者 浩泽学编程 所有, 如有侵权,请联系我们删除。

“SpringBoot+Ajax+redis实现隐藏重要接口地址”的评论:

还没有评论