SpringBoot+Ajax+redis實現(xiàn)隱藏重要接口地址的方法
前言
本篇文章主要講訴使用SpringBoot項目配合Ajax和redis實現(xiàn)隱藏重要接口地址,這里我以隱藏秒殺地址為例。
一、Ajax實現(xiàn)
前端代碼
簡單實現(xiàn)秒殺按鈕,input標簽里存入的是秒殺商品的id,不許展示,所以隱藏??梢钥吹?,點擊秒殺按鈕會觸發(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)
- 基本邏輯:當頁面觸發(fā)獲取秒殺地址的函數(shù),然后ajax異步請求服務(wù)器端獲取秒殺地址,服務(wù)器端返回隨機生成的秒殺地址,然后將返回對象作為參數(shù)傳入秒殺函數(shù),秒殺函數(shù)中ajax將秒殺地址拼接獲取完整秒殺地址向服務(wù)器端發(fā)送秒殺請求。
- 實現(xiàn):
- 真正秒殺地址:/seckill/path/doSeckill
- path是秒殺時隨機生成的,存入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進行拼接得到真正的秒殺地址 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隨機生成秒殺地址 //然后對地址進行簡單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實現(xiàn)一鍵生成表controller,service,mapper文件
這篇文章主要為大家詳細介紹了如何利用Java語言實現(xiàn)一鍵生成表controller,service,mapper文件,文中的示例代碼講解詳細,需要的可以收藏一下2023-05-05運行SpringBoot項目請求響應(yīng)流程分析以及404和500報錯的解決辦法
這篇文章主要介紹了運行Spring Boot項目請求響應(yīng)流程分析以及404和500報錯的解決辦法,文中通過代碼示例和圖文講解的非常詳細,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-12-12Spring Cloud 系列之服務(wù)調(diào)用 OpenFeign的實現(xiàn)
這篇文章主要介紹了Spring Cloud 系列之服務(wù)調(diào)用 OpenFeign的實現(xiàn),需要的朋友可以參考下2020-11-11每天練一練Java函數(shù)與算法Math函數(shù)總結(jié)與字符串轉(zhuǎn)換整數(shù)
這篇文章主要介紹了Java函數(shù)與算法Math函數(shù)總結(jié)與字符串轉(zhuǎn)換整數(shù),每天練一練,水平在不知不覺中提高,需要的朋友快過來看看吧2021-08-08java 實現(xiàn)簡單圣誕樹的示例代碼(圣誕節(jié)快樂)
這篇文章主要介紹了java 實現(xiàn)簡單圣誕樹的示例代碼(圣誕節(jié)快樂),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12