欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot+Ajax+redis實(shí)現(xiàn)隱藏重要接口地址的方法

 更新時(shí)間:2024年03月08日 14:24:44   作者:浩澤學(xué)編程  
這篇文章主要介紹了SpringBoot+Ajax+redis實(shí)現(xiàn)隱藏重要接口地址,本篇文章主要講訴使用SpringBoot項(xiàng)目配合Ajax和redis實(shí)現(xiàn)隱藏重要接口地址,這里我以隱藏秒殺地址為例,需要的朋友可以參考下

前言

本篇文章主要講訴使用SpringBoot項(xiàng)目配合Ajax和redis實(shí)現(xiàn)隱藏重要接口地址,這里我以隱藏秒殺地址為例。

一、Ajax實(shí)現(xiàn)

前端代碼

簡(jiǎn)單實(shí)現(xiàn)秒殺按鈕,input標(biāo)簽里存入的是秒殺商品的id,不許展示,所以隱藏??梢钥吹?,點(diǎn)擊秒殺按鈕會(huì)觸發(fā)getSeckillPath函數(shù)(獲取秒殺地址的函數(shù))。

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

Ajax邏輯實(shí)現(xiàn)

  • 基本邏輯:當(dāng)頁(yè)面觸發(fā)獲取秒殺地址的函數(shù),然后ajax異步請(qǐng)求服務(wù)器端獲取秒殺地址,服務(wù)器端返回隨機(jī)生成的秒殺地址,然后將返回對(duì)象作為參數(shù)傳入秒殺函數(shù),秒殺函數(shù)中ajax將秒殺地址拼接獲取完整秒殺地址向服務(wù)器端發(fā)送秒殺請(qǐng)求。
  • 實(shí)現(xiàn):
    • 真正秒殺地址:/seckill/path/doSeckill
    • path是秒殺時(shí)隨機(jī)生成的,存入redis,以便后續(xù)訪問(wèn)秒殺地址時(shí)比對(duì)是否時(shí)實(shí)時(shí)生成的正確秒殺地址
//獲取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后調(diào)取真正的秒殺地址
                    doSecKill(path);
                } else {
                    layer.msg(data.message);
                }
            },
            error: function () {
                layer.msg("客戶端請(qǐng)求錯(cuò)誤");
            }
        });
    }
    //真正的秒殺方法
    function doSecKill(path) {
        $.ajax({
        //將獲取的path進(jìn)行拼接得到真正的秒殺地址
            url: '/seckill/' + path + '/doSeckill',
            type: "POST",
            data: {
                goodsId: $('#goodsId').val()
            },
            success: function (data) {
                if (data.code == 200) {
                // 獲取秒殺結(jié)果,這個(gè)函數(shù)不再貼出,自己根據(jù)項(xiàng)目自行實(shí)現(xiàn)
                    getResult($("#goodsId").val());
                } else {
                    layer.msg(data.message);
                }
            }, error: function () {
                layer.msg("客戶端請(qǐng)求出錯(cuò)");
            }
        });
    }

二、服務(wù)器端實(shí)現(xiàn)

RespBean、RespBeanEnum是自己封裝的錯(cuò)誤封裝類(lèi)和錯(cuò)誤枚舉類(lèi)型,無(wú)需在意,只需要知道RespBean.error代表返回錯(cuò)誤,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);
    }

創(chuàng)建秒殺地址:

    @Override
    public String createPath(User user, Long goodsId) {
    	//利用UUID隨機(jī)生成秒殺地址
    	//然后對(duì)地址進(jìn)行簡(jiǎn)單md5加密
        String str = MD5Util.md5(UUIDUtil.uuid() + "123456");
        //加密后地址存入redis
        redisTemplate.opsForValue().set("seckillPath:" + user.getId() + ":" + goodsId, str, 1, TimeUnit.MINUTES);
        return str;
    }

真正的秒殺請(qǐng)求:

@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);
        }
        //檢測(cè)秒殺地址是否正確
        boolean check = orderService.checkPath(user, goodsId, path);
        if (!check) {
            return RespBean.error(RespBeanEnum.REQUEST_ILLEGAL);
        }
        //......
		//真正秒殺邏輯實(shí)現(xiàn),自己自行實(shí)現(xiàn),不再贅訴
		//......
        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);
    }

總結(jié)

以上就是SpringBoot+Ajax實(shí)現(xiàn)隱藏重要接口地址的實(shí)現(xiàn)。

到此這篇關(guān)于SpringBoot+Ajax+redis實(shí)現(xiàn)隱藏重要接口地址的文章就介紹到這了,更多相關(guān)SpringBoot redis隱藏接口地址內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論