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

在这里插入图片描述

🏡浩泽学编程:个人主页

 🔥 推荐专栏:《深入浅出SpringBoot》《java对AI的调用开发》
              《RabbitMQ》《Spring》《SpringMVC》《项目实战》

🛸学无止境,不骄不躁,知行合一

文章目录

  • 前言
  • 一、Ajax实现
    • 前端代码
    • Ajax逻辑实现
  • 二、服务器端实现
  • 总结


前言

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


一、Ajax实现

前端代码

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

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

Ajax逻辑实现

  • 基本逻辑:当页面触发获取秒杀地址的函数,然后ajax异步请求服务器端获取秒杀地址,服务器端返回随机生成的秒杀地址,然后将返回对象作为参数传入秒杀函数,秒杀函数中ajax将秒杀地址拼接获取完整秒杀地址向服务器端发送秒杀请求。
  • 实现:
    • 真正秒杀地址:/seckill/path/doSeckill
    • path是秒杀时随机生成的,存入redis,以便后续访问秒杀地址时比对是否时实时生成的正确秒杀地址
//获取path:秒杀地址的拼接路径function getSeckillPath() {//获取秒杀商品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("客户端请求错误");}});}//真正的秒杀方法function doSecKill(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")@ResponseBodypublic RespBean getPath(User user, Long goodsId) {if (user == null) {return RespBean.error(RespBeanEnum.SESSION_ERROR);}String str = orderService.createPath(user, goodsId);return RespBean.success(str);}

创建秒杀地址:

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

真正的秒杀请求:

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

检查秒杀地址的方法:

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

总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/729609.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

九型人格测试,8号领袖型人格的职业分析

8号人格&#xff0c;也叫领袖型人格&#xff0c;在九型人格中间&#xff0c;是一种天生领导的存在。他们生性开朗&#xff0c;能够和其他人建立良好的关系&#xff0c;为人不拘小节&#xff0c;遇强则强&#xff0c;坚守心中的理想和正义。不喜欢被人控制&#xff0c;喜欢自己当…

Java并发-并发模型

可以使用不同的并发模型来实现并发系统。一并发模型指定的系统协作线程如何完成他们给予的任务。不同的并发模型以不同的方式拆分任务&#xff0c;线程可以以不同的方式进行通信和协作。本并发模型教程将更深入地介绍撰写本文时&#xff08;2015年至2019年&#xff09;使用的最…

【Kotlin】Lambda表达式

1 常规调用 Lambda 表达式总结 中对 Java 的 Lambda 表达式进行了总结&#xff0c;本文将对 Kotlin 中的 Lambda 表达式进行总结。 1.1 无参函数 fun main() {var myFun: () -> Unit {println("test")}myFun() // 打印: test } 以上代码等价于&#xff1a; f…

【每日一问】Cookie、Session 和 Token 有什么区别?

Cookie、Session 和 Token 通常都是用来保存用户登录信息的技术&#xff0c;但三者有很大的区别&#xff0c;简单来说 Cookie 适用于简单的状态管理&#xff0c;Session 适用于需要保护用户敏感信息的场景&#xff0c;而 Token 适用于状态无关的身份验证和授权。 具体来说&…

大模型时代,华为与中软国际携手“打通AI落地应用最后一公里”

文 | 智能相对论 作者 | 叶远风 大模型驱动千行百业智能化变革已经成为广泛共识&#xff0c;下一步的问题是&#xff0c;企业要如何更好地推进&#xff1f; 近日&#xff0c;“2024中关村论坛系列活动——第二届北京人工智能产业创新发展大会”在北京国家会议中心成功举办&a…

每天一个数据分析题(一百九十四)

假如HS银行想进行用户购买理财产品情况研究的样本量确定和样本选取方法&#xff0c;下列说法哪些是正确的&#xff1f; A. 当我们不知道用户对某款理财产品是否感兴趣的具体比例时&#xff0c;通常假设 p0.5 来计算样本量。 B. 样本量的计算中&#xff0c;e 代表了希望对真值…

const shared_ptr<int>和shared_ptr<const int>的区别

const shared_ptr 和 shared_ptr 在 C 中表示两种不同的概念&#xff0c;尽管它们都与智能指针和常量性有关。下面是它们之间的主要区别&#xff1a; const shared_ptr 当你声明一个 const shared_ptr&#xff0c;你实际上是在声明一个指向 int 的智能指针&#xff0c;而这个…

零基础学习JS--基础篇--数字和日期

数字 javascript中常用的四种数字进制&#xff1a;十进制、二进制、八进制和十六进制。 这些进制都具有通用性&#xff0c;如果你有语言基础则可以略过&#xff0c;下面说一下指数形式。 指数形式&#xff1a; 0e-5 // 0 0e5 // 0 5e1 // 50 175e-2 // 1.75 1e3 …

MacOS终端命令行死循环

一、原因 &#xff08;在vim ~/.bash_profile写了source ~/.bash_profile&#xff09; 二、解决办法 1、contrl c 手动停止死循环 2、vim ~/.bash_profile &#xff08;使用 Vim 编辑器打开 .bash_profile 文件&#xff09; 3、键盘输入i进入编辑模式&#xff0c;编辑完成…

如何建站?

1. 选择域名&#xff1a;短且易记&#xff0c;与网站内容相关。 2. 购买主机&#xff1a;选择稳定、安全且价格合适的主机服务商。 3. 选择网站程序&#xff1a;根据需求选择网站类型&#xff0c;如博客、企业站、电商。 4. 设计网站&#xff1a;确定布局、导航、色彩&#xff…

[剑指offer] 数组中重复的数字

目录 1. 题目描述 2. 代码实现 1. 题目描述 📚 题目描述:在一个长度为 的数组里的所有数字都在 0 到 n−1 的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为 7 的数组…

yudao-cloud 学习笔记

前端代码 浏览器打开 https://cloud.iocoder.cn/intro/ F12 执行代码 var aaa $(".sidebar-group-items").find("a"); var ll[]; var tt[]; for(var i0;i<aaa.length;i ){ ll.push("https://doc.iocoder.cn" $(aaa[i]).attr("href&quo…

云计算 3月4号 (自配本地和远程yum源)

自建yum源 本地源 一、使用本地的镜像文件来制作yum源(做完记得删除) 1、挂载dvd镜像或将镜像拷贝到机器中 mkdir /yum-repo mount /dev/cdrom /yum-repo # 如果我们在设置中挂载了镜像使用这个方法 mount 镜像的路径 /yum-repo # 如果我们拷贝镜像到了系统中&#xff0c;可…

Docker 构建前端项目生成镜像

一、使用 Docker 构建前端项目镜像&#xff1a; 下载安装 Docker Desktop准备一个前端项目&#xff08;vue/react&#xff09;在项目的根目录新建名为 Dockerfile 的文件 # 设置基础镜像 FROM nginx:latest# 复制项目文件 COPY dist/ /usr/share/nginx/html/# 配置Nginx COPY…

PHP伪协议是什么?

PHP伪协议是一种特殊的URL协议&#xff0c;它允许PHP直接从PHP内部生成数据或者访问PHP自身处理的数据流&#xff0c;而不需要外部资源。这些协议是由PHP解释器内部定义和处理的&#xff0c;不同于HTTP、FTP、HTTPS等标准网络协议。下面是PHP伪协议的说明&#xff1a; 1. file…

Hi3516DV500+SC2210 AIISP 黑光相机

1. Hi3516DV500 Hi3516DV500是一颗面向行业市场推出的高清智能网络摄像头SoC。该芯片最高支持2路sensor输入&#xff0c;支持最高5M30fps的ISP图像处理能力&#xff0c;支持2F WDR、多级降噪、六轴防抖、多光谱融合等多种传统图像增强和处理算法&#xff0c;支持通过AI算法对输…

Java实战:Spring Boot 通过Filter 实现 Gzip 压缩超大 JSON 对象

本文将详细介绍如何使用 Spring Boot 集成 Filter&#xff0c;实现 Gzip 压缩超大 JSON 对象。我们将深入探讨 Gzip 压缩的原理&#xff0c;以及如何利用 Java 的 GZIPInputStream 和 GZIPOutputStream 类实现 JSON 对象的压缩和解压缩。 1. 引言 在当今的互联网时代&#xf…

第11周,第三期技术动态

大家好&#xff0c;才是真的好。 真没想到&#xff0c;本周是今年第十一周&#xff0c;2024年还有不到三百天就结束了。 今天周五&#xff0c;我们继续介绍与Domino相关产品新闻&#xff0c;以及互联网或其他IT行业动态等。 一、在Windows 10和Windows 11上运行Domino和Trav…

什么情况下导致索引失效

索引在数据库中起着加快数据检索速度的作用&#xff0c;但在某些情况下&#xff0c;索引可能会失效&#xff0c;即数据库系统无法有效地使用索引来加速查询。以下是一些常见导致索引失效的情况&#xff1a; 1. 未使用索引列进行查询&#xff1a; - 当查询条件中未使用索引列…

案例研究|辛格林电梯借助DataEase实现数据整合与智能展示

辛格林电梯&#xff08;SIGLEN&#xff09;于2012年创立&#xff0c;是电梯领域的领军品牌之一。该公司总部位于广东佛山&#xff0c;是全国首批获得A1级电梯制造资质的企业&#xff0c;拥有省级工程技术研究中心。辛格林电梯专注于研发和生产高品质电梯产品&#xff0c;涵盖别…