最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

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

一、Ajax實現(xiàn)

前端代碼

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

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

Ajax邏輯實現(xiàn)

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

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

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);
    }

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

    @Override
    public String createPath(User user, Long goodsId) {
    	//利用UUID隨機(jī)生成秒殺地址
    	//然后對地址進(jìn)行簡單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);
        }
        //......
		//真正秒殺邏輯實現(xiàn),自己自行實現(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實現(xiàn)隱藏重要接口地址的實現(xiàn)。

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

相關(guān)文章

  • Java字符串轉(zhuǎn)整數(shù)與拼接實戰(zhàn)指南

    Java字符串轉(zhuǎn)整數(shù)與拼接實戰(zhàn)指南

    本文總結(jié)了Java中字符串轉(zhuǎn)整數(shù)和字符串相加的核心知識點(diǎn),本文結(jié)合實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2026-02-02
  • JAVA操作HDFS案例的簡單實現(xiàn)

    JAVA操作HDFS案例的簡單實現(xiàn)

    本篇文章主要介紹了JAVA操作HDFS案例的簡單實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • 使用@PropertySource讀取配置文件通過@Value進(jìn)行參數(shù)注入

    使用@PropertySource讀取配置文件通過@Value進(jìn)行參數(shù)注入

    這篇文章主要介紹了使用@PropertySource讀取配置文件通過@Value進(jìn)行參數(shù)注入,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 詳解Java正則表達(dá)式中Pattern類和Matcher類

    詳解Java正則表達(dá)式中Pattern類和Matcher類

    java.util.regex是一個用正則表達(dá)式所訂制的模式來對字符串進(jìn)行匹配工作的類庫包。包括兩個類Pattern和Matcher Pattern,Pattern是一個正則表達(dá)式經(jīng)編譯后的表現(xiàn)模式。Matcher對象是一個狀態(tài)機(jī)器,它依據(jù)Pattern對象做為匹配模式對字符串展開匹配檢查。
    2016-12-12
  • 全網(wǎng)最新springboot整合mybatis-plus的過程

    全網(wǎng)最新springboot整合mybatis-plus的過程

    在本文中,介紹了 MyBatis-Plus 的核心功能和使用方法,包括如何配置分頁插件、編寫分頁查詢代碼、使用各種 Wrapper 構(gòu)建復(fù)雜查詢條件等,通過這些內(nèi)容,相信你已經(jīng)對 MyBatis-Plus 有了更深入的了解,并能夠在實際項目中靈活應(yīng)用這些功能,感興趣的朋友跟隨小編一起看看吧
    2025-02-02
  • 詳解Eclipse提交項目到GitHub以及解決代碼沖突

    詳解Eclipse提交項目到GitHub以及解決代碼沖突

    這篇文章主要介紹了詳解Eclipse提交項目到GitHub以及解決代碼沖突,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-03-03
  • Java?獲取本機(jī)IP地址的實例代碼

    Java?獲取本機(jī)IP地址的實例代碼

    這篇文章主要介紹了Java?獲取本機(jī)IP地址,本文通過實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • Java面向?qū)ο笾饔糜蛟敿?xì)解讀

    Java面向?qū)ο笾饔糜蛟敿?xì)解讀

    這篇文章主要介紹了Java面向?qū)ο笾饔糜蛟敿?xì)解讀,在java編程中,主要的變量就是屬性和局部變量,局部變量一般是指在成員方法中定義的變量,局部變量也就是除了屬性之外的其他變量,作用域為定義他的代碼塊中,需要的朋友可以參考下
    2024-01-01
  • Spring?Boot實現(xiàn)WebSocket實時通信

    Spring?Boot實現(xiàn)WebSocket實時通信

    本文主要介紹了Spring?Boot實現(xiàn)WebSocket實時通信,包含實現(xiàn)實時消息傳遞和群發(fā)消息等功能,具有一定的參考價值,感興趣的可以了解一下
    2024-05-05
  • Spring Boot 中的 @PutMapping 注解原理及使用小結(jié)

    Spring Boot 中的 @PutMapping 注解原理及使用小結(jié)

    在本文中,我們介紹了 Spring Boot 中的 @PutMapping 注解,它可以將 HTTP PUT 請求映射到指定的處理方法上,我們還介紹了 @PutMapping 注解的原理以及如何在 Spring Boot 中使用它,感興趣的朋友跟隨小編一起看看吧
    2023-12-12

最新評論

札达县| 乐都县| 林口县| 布拖县| 攀枝花市| 淳安县| 富顺县| 秦安县| 平江县| 南京市| 北碚区| 湟源县| 清水河县| 胶南市| 潮州市| 翁源县| 江永县| 沙湾县| 雷山县| 神木县| 长宁县| 衡阳县| 仙游县| 牡丹江市| 杨浦区| 格尔木市| 唐山市| 江川县| 新昌县| 塘沽区| 富宁县| 东至县| 皮山县| 米林县| 宿州市| 昆明市| 蛟河市| 越西县| 承德县| 巨野县| 晋城|