SpringBoot+Ajax+redis实现隐藏重要接口地址的方法
作者:浩泽学编程
这篇文章主要介绍了SpringBoot+Ajax+redis实现隐藏重要接口地址,本篇文章主要讲诉使用SpringBoot项目配合Ajax和redis实现隐藏重要接口地址,这里我以隐藏秒杀地址为例,需要的朋友可以参考下
前言
本篇文章主要讲诉使用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() { //获取秒杀商品id var 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") @ResponseBody public 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); }
创建秒杀地址:
@Override public String createPath(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) @ResponseBody public 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 */ @Override public 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实现隐藏重要接口地址的实现。
到此这篇关于SpringBoot+Ajax+redis实现隐藏重要接口地址的文章就介绍到这了,更多相关SpringBoot redis隐藏接口地址内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!